![]() |
![]() ![]() |
![]() |
![]() ![]()
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ć:
Oczywiście mogę zrobić to tak:
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
|
|
|
![]()
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]! |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
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:
Co prawda problem da się obejść tak:
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
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 83 Pomógł: 9 Dołączył: 21.05.2004 Skąd: Glogau/Breslau Ostrzeżenie: (0%) ![]() ![]() |
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?
to co chcesz osiągnąć, to jeszcze "gorszy" styl pisania, bo w ogóle niepoprawny;) Ty to źle nazywasz, stąd ci się wydaje, że tak powinno się dać. To nie jest definiowanie domyślnego argumentu składającego się z dwóch części. To jest po prostu definiowanie domyślnego argumentu jako wynik pewnej operacji, a to jak sam wiesz jest zabronione. Ten post edytował michaJlS 29.08.2010, 12:40:59 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Niestety natrafiłem na sytuację gdzie jest to przydatne. Pokazuję to niżej:
Co prawda problem da się obejść tak:
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. Oba przypadki są jak dla mnie pozbawione sensu i są złą praktyką, przecież jeżeli przy przekazywaniu do funkcji będziesz składał sobie zmienną to ta funkcja jest kompletnie nieelastyczna, powinieneś to tak rozwiązać:
funkcja przyjmuje jakieś parametry i wykonuje na nich operacje, jeżeli jakieś parametry mają wartość domyślną to ją ustawiasz, ale jeżeli te wartości trzeba poskładać to robisz to przed funkcją Ten post edytował tehaha 29.08.2010, 12:59:23 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 782 Pomógł: 153 Dołączył: 21.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
To raczej jest ograniczenie Zend Engine - PHP pozwala przecież na osadzanie stałych jako parametrów domyślnych - one nie zmieniają wartości. Logicznie rzecz biorąc złączenie dwóch stałych stringów również daje stały ciąg tekstowy. Chyba że tu chodzi np. o operacje na liczbach zmiennoprzecinkowych (gdzie wynik już nie do końca jest stały).
-------------------- Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]! |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 10:17 |