Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Instance w klasie extended
--JacekP--
post
Post #1





Goście







Witam

Mam pytanie, jak rozwiązać sprawę $_instance w klasie rodzica ?
Stworzyłem znaną wszystkim funkcję :

<code=php> private static $_instance;

public static function instance() {

if(!isset(self::$_instance)){
self::$_instance = new static();
}
return self::$_instance;
}</code>
Teraz każda klasa która dzedziczy po tej klasie ma funkcję instance, problem jednak pojawił się taki że $_instance przyjmuje wartość pierwszej stworzonej klasy którą zainicjuję tą funkcją, wydaje mi się to błędnym działaniem, zmienna $_instance mimo że statyczna powinna być statyczną dla klasy która dziedziczy po tej,

Jak rozwiązać ten problem, czy mogę usunąć static, wtedy będą się za każdym razem tworzyć się nowe kopie dla każdej klasy i funkcja straci sens :/

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
--JacekP--
post
Post #2





Goście







Przejrzałem wątek, i nie znajduję tam rozwiązania, problem jest taki że nie ma jak utworzyć zmiennej statycznej ale dla jednego rodzaju klasy, czy takie coś jest możliwe ?
Bo dla mnie klasa B i C to 2 zupełnie inne klasy, więc powinna istnieć możliwość przypisania im różnych wartości $me.

  1. <?php
  2. class A
  3. {
  4.  
  5. public static $me;
  6.  
  7. public static function getInstance()
  8. {
  9. if(!isset(self::$me)){
  10. self::$me = new static();
  11. }
  12. return self::$me;
  13. }
  14.  
  15. }
  16.  
  17. class B extends A
  18. {
  19. //stuff...
  20. }
  21. class C extends A
  22. {
  23. //stuff...
  24. }
  25.  
  26. $obj1 = B::getInstance();
  27. $obj2 = C::getInstance();
  28. echo get_class($obj1).' -- '.get_class($obj2); // B -- B, czemu nie B -- C, czy taki efekt da się uzyskać ?
  29.  
  30.  
  31. ?>


Jeśli chodzi o to po co mi to, to mam dużo klas które muszą być dostępne z dowolnego miejsca w kodzie np. klasa która zbiera logi.
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 11.10.2025 - 09:08