Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][referencje] - gubienie instancji
Vengeance
post 29.10.2004, 14:55:49
Post #1





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


Witam.

Mam problem z działaniem tego kodu na php4

  1. <?php
  2.    
  3.    class Modules
  4.    {
  5.       function &load($name)
  6.       {
  7.          return call_user_func(array($name, 'instance'));
  8.       }
  9.  
  10.       function &instance()
  11.       {
  12.          static $instance = false;
  13.          if ($instance === false)
  14.          {
  15.             $instance = new Modules();
  16.          }
  17.          return $instance;
  18.       } 
  19.    }
  20.  
  21.    class Test
  22.    {
  23.       var $zmienna;
  24.  
  25.       function &instance()
  26.       {
  27.          static $instance = false;
  28.          if ($instance === false)
  29.          {
  30.             $instance = new Test();
  31.          }
  32.          return $instance;
  33.       } 
  34.    }
  35.  
  36.    function &load($name)
  37.    {
  38.       $obj =& Modules::instance();
  39.       return $obj->load($name);
  40.    }
  41.  
  42. $db = load('Test');
  43. $db->zmienna = 'czy dziala?';
  44. $sql = load('Test');
  45. echo $sql->zmienna;
  46. ?>


Gdyby ktoś mógłby mi doradzić gdzie dokładnie stosować znaczek & w tym przykładowym kodzie i dlaczego on nie działa oraz co zrobić aby zadziałał byłbym wdzięczny.

Pozdrawiam.


-----dodane------
ok poradzilem sobie ale prosze o pewna podpowiedź.
Przykładowy kod:

  1. <?php
  2.  
  3.  class DbDriver
  4.  {
  5. var $connect_id;
  6.  
  7. function &instance()
  8. {
  9.  static $instance = false;
  10.  if($instance === false)
  11.  {
  12. $instance = new DbDriver;
  13.  }
  14.  return $instance;
  15. }
  16.  }
  17.  
  18.  function &load($name)
  19.  {
  20. // cos robi
  21.  }
  22.  
  23.  $db =& load('DbDriver');
  24.  $db->connect_id = 369;
  25.  $sql =& load('DbDriver');
  26.  echo $sql->connect_id;
  27. ?>


i teraz tak. na początku deklarowałem taką postać funkcji load()
  1. <?php
  2.  
  3. function &load($name)
  4. {
  5.  return call_user_func(array($name, 'instance'));
  6. }
  7.  
  8. ?>


Jednak nie działało to. Gubiono instancję obiektu.
Zrobiłem więc tak:
  1. <?php
  2.  
  3. function &load($name)
  4. {
  5.  eval(&#092;"$a =& $name::instance();\");
  6.  return $a;
  7. }
  8.  
  9. ?>


I teraz już wszystko ładnie działa. I teraz pytanie do Was.
Czy idzie to zrobić aby działało (czyt. ladnie przekazywało referencję) bez wywoływania eval() questionmark.gif bo call_user_func() jak widać jakoś nie radzi sobie :/

Ten post edytował Vengeance 30.10.2004, 18:37:49


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 04:16