Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Różnica w wartości uzyskanej przez kod i ten sam kod w eval()
Forum PHP.pl > Forum > PHP
spokoloko123
  1. <?php
  2. class MojaKlasa
  3. {
  4. public $w1;
  5. public $w2;
  6. public $w3;
  7.  
  8. public static function __set_state($tab)
  9. {
  10. $obj = new MojaKlasa();
  11. $obj->w1 = $tab['w1'];
  12. $obj->w2 = $tab['w2'];
  13. //$obj = "FooBar!";
  14. return $obj;
  15. }
  16. public function getThis()
  17. {
  18. return $this;
  19. }
  20. }
  21.  
  22. $obj = new MojaKlasa();
  23. $obj->w1 = 123;
  24. $obj->w2 = 'abc';
  25. $obj->getThis()->w3 = 'foo';
  26.  
  27. eval('$b = ' . var_export($obj, true) . ';');
  28.  
  29. //$b = var_export($obj, true);
  30.  
  31. echo "<pre>";
  32. var_dump($b);
  33. echo "</pre>";
  34. ?>


Nie rozumiem jednej rzeczy. Dlaczego
  1. eval('$b = ' . var_export($obj, true) . ';');
daje inny wynik niż
  1. $b = var_export($obj, true);
sebastian.rozmus
Przykład z evalem wyświetla się jako obiekt bo string który do niego wrzucasz po przejściu parsera ma wartość:

  1. $b = MojaKlasa::__set_state(array(
  2. 'w1' => 123,
  3. 'w2' => 'abc',
  4. 'w3' => 'foo',
  5. ));


Natomiast kiedy przypisujesz do zmiennej wartość funkcji to jest to tylko string i ma postać równoważną do:

  1. $b = "MojaKlasa::__set_state(array(
  2. 'w1' => 123,
  3. 'w2' => 'abc',
  4. 'w3' => 'foo',
  5. ));";


pozdrawiam
Sebastian Rozmus
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.