Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> dynamiczne tworzenie instancji klasy wewnątrz innej klasy, __call, namespace
damian.1923
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 18.08.2008

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


witam

Proszę o podpowiedź jak prawidłowo utworzyć instancję klasy Child

  1. <?php
  2.  
  3. namespace app;
  4.  
  5. class One {
  6.  
  7. function __call($fname,$fargs) {
  8.  
  9. // sposób 1 :
  10.  
  11. $classname = ucfirst($fname);
  12. return new $classname;
  13.  
  14. // sposób 2 :
  15.  
  16. $a = eval("new " . ucfirst($fname) . "(" . implode(", ", $fargs) . ");");
  17. return $a;
  18. }
  19. }
  20.  
  21. class Child {
  22. function __construct() {
  23. echo "the child was born";
  24. }
  25. }
  26.  
  27.  
  28. $o = new One;
  29. $o->Child();
  30.  
  31. ?>


oba sposoby wyrzucają błąd:

Fatal error: Class 'Child' not found
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
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%)
-----


1. Nazwa klasy to app\Child, nie Child.
2. Po co w ogóle takie "cuda"? Czemu ma to niby służyć?
Go to the top of the page
+Quote Post
damian.1923
post
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 18.08.2008

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


dziękuję, działa.

Chcę z poziomu jednej klasy zarządzać wieloma obiektami:

klasa główna App
klasy podrzędne Constructor, Loader

$App->Constructor()->method();
$App->Loader()->method();

Go to the top of the page
+Quote Post
Crozin
post
Post #4





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

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


1. Na 99% nie powinieneś mieć żadnej "głównej klasy", pojedyncza klasa nie powinna zajmować się "wszystkim".
2. Jak już to:
  1. class KlasaPotworekZarzadzajacaWszystkim {
  2. public function uruchom($obiekt) {
  3. // zrób cokolwiek tam chcesz z tym obiektem
  4.  
  5. return $obiekt;
  6. }
  7. }
  8.  
  9. $app = new KlasaPotworekZarzadzajacaWszystkim();
  10. $app->uruchom(new InnyObiekt())->iJegoMetoda();
Go to the top of the page
+Quote Post
by_ikar
post
Post #5





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


No i ten eval.. Jest na prawdę niewiele miejsc gdzie eval powinien być używany, i zdecydowanie jest to miejsce na tego typu fanaberie, czyli już prędzej sposób pierwszy..
Go to the top of the page
+Quote Post

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: 2.10.2025 - 23:33