Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Dziwne działanie funkcji
Wolny_Login
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 27.09.2012

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
untorched
post
Post #2





Grupa: Zarejestrowani
Postów: 318
Pomógł: 76
Dołączył: 27.12.2011
Skąd: Dąbrowa Górnicza

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


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)

Ten post edytował untorched 1.02.2015, 00:04:21
Go to the top of the page
+Quote Post
Wolny_Login
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 27.09.2012

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


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?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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();
Go to the top of the page
+Quote Post
untorched
post
Post #5





Grupa: Zarejestrowani
Postów: 318
Pomógł: 76
Dołączył: 27.12.2011
Skąd: Dąbrowa Górnicza

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


Automatycznie, jako public.

@Pyton_000 mnie uprzedził (IMG:style_emoticons/default/smile.gif)

Ten post edytował untorched 1.02.2015, 00:29:14
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 18:39