Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Stała+string jako argument domyślny funkcji, ... czy to możliwe?
kiler129
post 29.08.2010, 02:35:30
Post #1





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

Ostrzeżenie: (0%)
-----


Witajcie!
Natrafiłem na dziwne ograniczenie którego nie potrafię przeskoczyć:

  1. <?php
  2. define("TEST", "abc");
  3.  
  4. function foo($a = TEST) { print($a); } //Wynik: abc
  5. function bar($a = "def") { print($a); } //Wynik: def
  6. function foobar($a = TEST."def") { print($a); } //Wynik: Parse error: syntax error, unexpected '.', expecting ')'
  7. ?>


Oczywiście mogę zrobić to tak:
  1. <?php
  2. function foobar($a = TEST) { $a .= "def"; print($a); } //Wynik: abcdef
  3. ?>


Ale w żaden sposób nie kojarzy się to z dobrym stylem pisania i przejrzystością kodu. Czy w PHP niemożliwe jest zdefiniowanie argumentu domyślnego funkcji składającego się z 2 części?


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
everth
post 29.08.2010, 03:07:15
Post #2





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Manual i cytat
Cytat
Domyślna wartość musi być stałym wyrażeniem, a nie na przykład zmienną, członkiem klasy czy wywołaniem funkcji

Czy to chcesz zrobić ma sens? Może ma, nie spotkałem się z czymś takim ani nie bardzo wiem czemu miałoby to służyć - wartość domyślna jest stała, nie powinna zależeć od innych warunków - jeśli zależy to należy ją przekazać. Do operacji na zmiennych mamy ciało funkcji a nie parametry.


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
kiler129
post 29.08.2010, 03:49:39
Post #3





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

Ostrzeżenie: (0%)
-----


Cytat(everth @ 29.08.2010, 04:07:15 ) *
Manual i cytat

Czy to chcesz zrobić ma sens? Może ma, nie spotkałem się z czymś takim ani nie bardzo wiem czemu miałoby to służyć - wartość domyślna jest stała, nie powinna zależeć od innych warunków - jeśli zależy to należy ją przekazać. Do operacji na zmiennych mamy ciało funkcji a nie parametry.


Niestety natrafiłem na sytuację gdzie jest to przydatne. Pokazuję to niżej:
  1. define("APATH", "/Users/Grzegorz/Sites/uCMS");
  2.  
  3. foo($safe_dir=APATH."/download") { ... }


Co prawda problem da się obejść tak:
  1. define("APATH", "/Users/Grzegorz/Sites/uCMS");
  2. define("SAFE_BROWSE_PATH", APATH."/download"); //path where user can safety view without violating security
  3.  
  4. foo($safe_dir=SAFE_BROWSE_PATH) { ... }



To że nie powinna od niczego zależeć i może być z całą definicją funkcji uznana jako stała to wiem ;] Tyle że połączenie nawet 2 stringów ("foo"."bar") skutkuje błędem.

Ten post edytował kiler129 29.08.2010, 03:50:09


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:35