Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP] Wywołanie klasy, po jej nazwie.
Forum PHP.pl > Forum > PHP > Object-oriented programming
sniezny_wilk
Witam,

gdzie w OOP w "magicznych metodach" chyba kiedyś widziałem taką funkcję.. chodzi mi o to, że mam np. klika klas:

  1. <?php
  2. class Jakas
  3. {
  4. //....
  5. }
  6. ?>


I potem załóżmy podaję jakiś parametr w postaci string'a który zawiera nazwę klasy. Wszystkie klasy mają taką samą strukturę, jak zrobić coś takiego:

  1. <?php
  2. require_once('classes/'.$parametr'.class.php');
  3.  
  4. // teraz chciałbym stworzyć nowy obiekt
  5.  
  6. $obiekt = new // no właśnie i co tutaj wstawić ?
  7. ?>


Czy są jakieś metody lub funkcję w OOP PHP'a które to wspomagają ? Czy muszę jakiegoś evala użyć ?
Sabistik
  1. <?php
  2. $obiekt = new $parametr();
  3. ?>

?
sniezny_wilk
sciana.gif O niee.. cofam się w rozwoju chyba :/ nawet nie sprawdziłem, czy tak można.. wydawało mi się to niemożliwe. Dzięki Sabistik biggrin.gif
sobstel
jeśli konstruktor przyjmuje jakieś argumenty to musisz użyć call_user_func_array i Reflection:

  1. <?php
  2. $args = array($arg1, $arg2);
  3.  
  4. call_user_func_array(
  5. array(new ReflectionClass($className), 'newInstance'), $args
  6. );
  7. ?>
dr_bonzo
E-e, proste
  1. <?php
  2. $x = new $costam( $p1, $p2 );
  3. ?>
tez dziala smile.gif
sniezny_wilk
@sopel - trochę przekombinowałeś winksmiley.jpg
-=Peter=-
Sopel nic nie przekombinował, tylko podał rozwiązanie dla dowolnej liczby argumentów, a nie jak dr_bonzo tylko i wyłącznie dla dwóch...
siemakuba
Cytat(-=Peter=- @ 20.03.2008, 14:16:46 ) *
Sopel nic nie przekombinował, tylko podał rozwiązanie dla dowolnej liczby argumentów, a nie jak dr_bonzo tylko i wyłącznie dla dwóch...

Nie masz racji.

Zamykam celem powstrzymania czczych dyskusji nad rozwiązanym problemem.

pozdr.
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-2024 Invision Power Services, Inc.