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
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Wydało mi się to eleganckie, bo jak inaczej mam pobrać klasę która jest gdzieś tam tworzona.
Zawsze powinieneś dążyć do tego by przekazywanie zależności było jawne, najlepiej na podstawie interfejsu, nie klasy (oczywiście tam gdzie to ma sens).
Cytat
Albo musiał bym do każdej głupiej klasy ładować referencję do niej, a tak miałem prosty kod Log->me()->msg('coś tam coś');
Ten kod jest tak ładny, że przy pierwszej próbie modyfikacji, wymiany implementacji, przetestowania aplikacji czy ponownego użycia kodu przez dwa dni klnąłbyś pod nosem. A jakbyś miał jeszcze kilka aplikacji do zmodyfikowania trwałe samookaleczenie wydałoby Ci się znacznie lepszą alternatywą.
Cytat
Jak rozumiem ten prosty kod jest nie zalecany, w sumie trochę to zaprzecza obiektowości, tak przynajmniej na moje oko.
W obiektowości chodzi o rozwiązywanie problemów na poziomie obiektów, nie klas.
Cytat
Podobnie global też jest dla mnie jakimś nie porozumieniem, to po kiego bawić się w klasy.
A co Ty zrobiłeś jak nie "ładną otoczkę" dla zwykłego globala? Zwykły global mimo iż jest złem wcielonym, jest jeszcze o tyle lepszy, że nadal pozostawia możliwość chociażby wymiany implementacji.

Zanim zaczniesz jeszcze wymyślać swoje rozwiązania (swoją drogą nie do końca zrozumiałem jak chciałbyś by ten Starter działał) skorzystaj może najpierw ze sprawdzonych rozwiązań? Patrz, mój wcześniejszy post, dot. DIC-a.
Go to the top of the page
+Quote Post

Posty w temacie


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: 12.10.2025 - 02:13