Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dynamiczne tworzenie instancji klasy wewnątrz innej klasy
Forum PHP.pl > Forum > PHP > Object-oriented programming
damian.1923
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
Crozin
1. Nazwa klasy to app\Child, nie Child.
2. Po co w ogóle takie "cuda"? Czemu ma to niby służyć?
damian.1923
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();

Crozin
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();
by_ikar
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..
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.