Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!
Kategorie

Kategorie

Kategoria wyżej
O autorze

O autorze

Bartosz (nugatto) Dołęga
Reklama

Reklama

Podobne Artykuły

Poniżej znajduje się lista podobnych artykułów:
Brak powiązanych artykułów

Gdy referencje mogą zaskoczyć

Oto kod prostej aplikacji, która może posłużyć za przykład:

<?php  class myApp
  {
    protected $myVar;
    
    public function runMe()
    {
      $this->printMyVar();
      $a = &$this->myVar->nonExistingArray['a'];
      $this->printMyVar();
      print_r($this->myVar);
    }
    
    protected function printMyVar()
    {
      echo ('The class of myVar is:' . get_class($this->myVar) . "\n");
    }
  }
  
  $myApp = new myApp();
  $myApp->runMe();?>

Metoda printMyVar usiłuje wyświetlić nazwę klasy dla atrybutu myVar. Ponieważ zmienna ta nie jest nigdzie zainicjowana, funckja get_class() zwróci pusty ciąg znaków. W metodzie runMe() zmienna myVar użyta jest z kolei jako obiekt - wyciągana jest wartość nieistniejącej tablicy w naszym nieistniejącym obiekcie. Oczywisty jest fakt, iż powyższy przykład demonstruję niewskazane praktyki programistyczne. Mimo to, większośc doświadczonych programistów nie przewidziałoby poprawnie zachowania tego kodu. Spodziewalibyśmy się prawdopodobnie, że zmienna $a przyjmie wartość pustą o ile nie pojawi się błąd użycia niezdefiniowanej zmiennej.

Nic bardziej mylnego - próba dostępu do niezainicjowanej zmiennej przez referencję spowoduje przypisanie jej typu obiekt klasy stdClass. Poniżej zamieszczono wyjście opisywanego skryptu:

$a = $this->myVar->nonExistingArray['a'];
$this->myVar->nonExistingArray['a'] = 2;

Ten kod, spowoduje wyświetlenie błędu, ostrzegając nas o próbie dostępu do nieistniejącego obiektu.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (0)
Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2017 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System