Skip to content

PHP: prawie jak parametry nazwane

by zergu on Marzec 3rd, 2010 Blip Facebook Flaker Twitter Wykop

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

From → PHP

7 Comments
  1. lato_p permalink

    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.

  2. zergu permalink

    Ołrajt, zgadza się. Tylko gdzie we wpisie jest napisane, że to są parametry nazwane? ;)

  3. lato_p permalink

    „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.

  4. reinmar permalink

    @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ę ;)

  5. lato_p permalink

    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.

  6. zergu permalink

    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…

  7. 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 :(

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS

Notify me of followup comments via e-mail. You can also subscribe without commenting.