PHP: prawie jak parametry nazwane

W PHP nie ma czegoś takiego jak parametry nazwane z działania, ale jest taka rzecz z …wyglądu. O co chodzi? Mając funkcję:
function foo ($a = 1, $b = 22) { echo $a.' ~ '.$b; }
Normalnie ją wywołujemy na takie sposoby:
foo() // → '1 ~ 22' foo (6) // → '6 ~ 22' foo (3, 4) // → '3 ~ 4'
Jednak możemy sobie funkcję wywołać dodając etykiety parametrom:
foo ($a = 2, $b = 33) // → '2 ~ 33'
Możemy to zrobić również „niepoprawnie”:
foo ($b = 7, $a = 3) // → '7 ~ 3'
Jak widać PHP nie bierze pod uwagę tych nazw parametrów, jedynie kolejność. Nazwy mogą być dowolne, użyte zostaną i tak te z deklaracji funkcji. Powstaje więc pytanie — po co tego w ogóle używać? Otóż — dla przejrzystości kodu, co powinien dobrze zobrazować poniższy przykład:
render_last_posts (10, 'desc', true, null) // → że jakie te posty mają być? render_last_posts ($limit = 10, $sort = 'desc', $only_published = true, $by_user = null) // aaa, takie!
Uwaga. Takie przypisania ustawiają wartości zmiennych w danym zakresie, co czasami może doprowadzić do błędów (nadpisanie wcześniej zdefiniowanej zmiennej) lub być sytuacją pożądaną (przypisanie wartości do późniejszego wykorzystania).
Brak podobnych wpisów.
Autorzy zdjęć: Erik Charlton





W PHP nie możesz wywołać funkcji z nazwanymi parametrami. To, co opisujesz to proste wywołanie funkcji wraz z utworzeniem kilku zmiennych.
To:
render_last_posts ($limit = 10, $sort = ‘desc’,
$only_published = true, $by_user = null);
działa w ten sposób:
$limit = 10;
$sort = ‘desc’;
$only_published = true;
$by_user = null;
render_last_posts ($limit, $sort, $only_published, $by_user);
Tak, Twoja wersja wygląda może trochę fajniej i krócej, ale nie powinieneś jej podpinać pod coś, czym nie jest. Wywołania funkcji z nazwanymi parametrami są w Pythonie, nie w PHP.
Ołrajt, zgadza się. Tylko gdzie we wpisie jest napisane, że to są parametry nazwane? ;)
„Jednak możemy sobie funkcję wywołać dodając etykiety parametrom:”
oraz
„Jak widać PHP nie bierze pod uwagę tych nazw parametrów, jedynie kolejność. Nazwy mogą być dowolne, użyte zostaną i tak te z deklaracji funkcji.”
Przy tych fragmentach odniosłem takie wrażenie, kiedy utworzenie zmiennej nazywasz etykietą/nazwą parametru.
@lato_p: „W PHP nie ma czegoś takiego jak parametry nazwane z działania, ale jest taka rzecz z …wyglądu”
Jak z całego tekstu sobie zacytujesz sobie wybiórczo po jednym wyrazie to złożysz z tego nawet jakąś poezję ;)
Jeśli ktoś szuka czegoś z google (załóżmy że ‘php parametry nazywane’) i trafia tutaj, niemal zawsze pominie pierwsze zdanie, przeskoczy dalej i się dowie, że można nadać parametrom etykiety (czegoś oczywiście w PHP nie można zrobić), ale problem będzie z kolejnością.
Dlatego nadal będę twierdził, że zdanie “Jednak możemy sobie funkcję wywołać dodając etykiety parametrom:” jest niepoprawne, a powinno być coś w stylu: „Jednak możemy wywołać funkcję tworząc zmienne o takiej samej nazwie jak w definicji funkcji”. I kiedy jest jasno określone, co się skąd bierze może zostać wytłumaczone, że tak, jest to podobne do parametrów nazywanych, lecz w PHP taki mechanizm nie istnieje.
Jak się zachowują ludzie „przychodzący z Google’a” to bym nie zakładał, ale fakt jest, że w necie czyta się coraz bardziej wybiórczo i chyba trzeba zwracać większą uwagę na zrozumiałość tekstu, bo walczyć z tym się raczej nie da…
ktoś nie znający dobrze PHP a napotykajacy taki kawałek kodu, dla poprawienia jego czytelności może postanowić zmienić kolejność parametrów… a wtedy klapa :(