Autor Zpráva
Jimilo
Profil *
Zdravím,

potřebuji poradit s parametrickým voláním statických metod nebo funkcí: něco jako následující kód nefunguje (např. pro inicializaci singletonu):

$singleton='classSingleton';
$instance=$singleton::getInstance(); //toto nefunguje

Netuší někdo, jak na věc?

Díky moc
martindeveloper
Profil
class Test
{
   public static function doSomeStuff()
   {
       return true;
   }
}

$bool = Test::doSomeStuf();


EDIT: Asi jsem to blbě pochopil, pokud to teď chápu dobře, tak následující kód pomůže :

class Test
{
    public function get()
    {
        echo 1;
    }
}

$class = "Test";

call_user_func($class . "::get"); //vypíše 1
Nox
Profil
Jimilo:
To co jsi se tu pokusil napsat se dělá takto: http://en.wikipedia.org/wiki/Singleton_pattern#PHP
Jimilo
Profil *
martindeveloper:
Díky za rychlou reakci, ale měl jsem na mysli: s názvem třídy jako parametrem proměnné. Klasický konstruktor není problém volat následovně:

$nameClass='Test';
$test=new $nameClass(); //toto funguje

ale konstrukce s voláním statické metody (např. pro inicializaci singletonu) již bohuže nefunguje:

$nameClass='Test';
$test=$nameClass::getInstance(); //toto funguje
martindeveloper
Profil
Jimilo:
Viz můj edit :)
Jimilo
Profil *
Poslední řádek samozřejmě NEfunguje. Prozatím se mi toto podařilo vyřešit jen pomocí všemocné funkce "eval".
P.S.: Návrhový vzor Singleton samozřejmě znám, jen jsem jej použil jako příklad...
Jimilo
Profil *
martindeveloper:
Díky moc, jasné a průhledné... - pro mě tupíka! :-)
Majkl578
Profil
Tebou uvedený kód funguje od verze 5.3. (Osobně už starší verze PHP neřeším, programuji pro 5.3).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0