Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dziwne działanie funkcji
Forum PHP.pl > Forum > Przedszkole
Wolny_Login
Cześć.
Tytuł tematu nie do końca jest prawdziwy, zaraz wyjaśnię dlaczego, jednak nie potrafiłem inaczej nazwać swojego problemu. Jakiś czas temu zacząłem oglądać pewien kurs związany z PHP. Zostały tam przedstawione pewne funkcje, których przy swojej znajomości PHP, nie jestem w stanie zrozumieć, jak mają prawo działać. Niestety tematem kursu było co innego, więc nie zostało w nim dokładnie to wyjaśnione. Mam nadzieję, że ktoś z Was będzie w stanie rozjaśnić temat.

Mamy kod (w pewnej klasie):
  1. function setAlertTypes($types){
  2. $this->setAlertTypes = $types; //Pytanie 1
  3. }
  4.  
  5. function setAlert($value, $type = null){
  6. if($type == ''){
  7. $type = $this->alertTypes[0];
  8. }
  9. $_SESSION[$type][] = $value; //Pytanie 2
  10. }
  11.  
  12. function getAlerts(){
  13. $data = '';
  14. foreach($this->setAlertTypes as $alert){
  15. if(isset($_SESSION[$alert])){
  16. foreach($_SESSION[$alert] as $value){
  17. $data .= '<li class="alert alert-' . $alert . '">' . $value . '</li>';
  18. }
  19. unset($_SESSION[$alert]);
  20. }
  21. }
  22. return $data;
  23. }


Pytanie 1: W bloku klasy nie została utworzona zmienna 'setAlertTypes', jednak autor w jakiś sposób się do niej odwołuje. Jak to jest możliwe? Jeśli w jakiś sposób zostanie automatycznie stworzona taka zmienna, to jaki typ będzie miała?
Pytanie 2: Czy taka konstrukcja "$_SESSION[$type][] = $value;" powoduje, że przy użyciu w np. taki sposób:
  1. $_SESSION['x'][] = 'wartosc 1';
  2. $_SESSION['x'][] = 'wartosc 2';
  3. $_SESSION['x'][] = 'wartosc 3';

zostaną nadane kolejne indeksy, do których będzie można się odwołać w taki sposób:
  1. $_SESSION['x'][0]
  2. $_SESSION['x'][1]
  3. $_SESSION['x'][2]

Dobrze rozumiem?
untorched
Ad. 1.
Typ? Dokładnie taki jak parametr $types.

Ad. 2.
O ile $_SESSION[$type] = array();, to kolejno będą przyjmować wartości o 1 większą(W przypadku pustej tablicy zaczynać się będą od 0)
Wolny_Login
Cytat(untorched @ 1.02.2015, 00:03:52 ) *
Ad. 1.
Typ? Dokładnie taki jak parametr $types.


Źle się wyraziłem. Chodziło mi o prawa dostępu (public/private/protected). Czyli, jeśli wcześniej nie została zdefiniowana zmienna 'setAlertTypes', a użyje ją w funkcji (takiej jak przedstawiona w pierwszym poście), zostanie ona automatycznie utworzona, prawda?
Pyton_000
Wszystko co nie jest określone typem private/protected jest public. Zmienna zostanie dynamicznie utworzona i nadana wartość.
Powinno się deklarować zmienne aby w getAlerts przy foreach nie wywaliło błędu

protected $setAlertTypes = array();
untorched
Automatycznie, jako public.

@Pyton_000 mnie uprzedził smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.