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







Dzięki za zainteresowanie.

Cytat
Możesz powiedzieć po pierwsze, po co Ci singleton, po drugie, czemu chcesz z niego dziedziczyć? Bo ciekaw jestem:)

A ot mam 4 klasy które okazały się niezbędne w różnych "sekcjach" aplikacji, właśnie log, czy klasa User etc.
Zwyczajnie musiałem przeklejać kod więc pomyślałem że zrobię klasę która będzie posiadać getInstance i z niej inne będą dziedziczyć. Wydało mi się to eleganckie, bo jak inaczej mam pobrać klasę która jest gdzieś tam tworzona.

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ś');

Jak rozumiem ten prosty kod jest nie zalecany, w sumie trochę to zaprzecza obiektowości, tak przynajmniej na moje oko.
Podobnie global też jest dla mnie jakimś nie porozumieniem, to po kiego bawić się w klasy.


Skoro zalecacie zrezygnować z sigletona to może sensowne jednak będzie stworzyć 4 klas głównych dla każdej sekcji i do każdej z nich skierować referencję głównej klasay gdzie już by gotowe instancje klas istniały czli:


  1. <?php
  2. class Starter
  3. {
  4.  
  5. public $sekcja1;
  6. public $sekcja2;
  7. public $sekcja3;
  8. public $sekcja4;
  9.  
  10. public FUNCTION run()
  11. {
  12. //stworz stronę
  13. }
  14.  
  15.  
  16. }
  17.  
  18. $s = new Starter();
  19. $s->addSekcje1($s);
  20. //etc...
  21. $s->run();
  22.  
  23.  
  24.  
  25. ?>


W takiej konfiguracji w razie czego główne klasy miały by dostęp do wszystkich danych.

?
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: 9.10.2025 - 09:55