Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: czy mozna uzyc $zmienna::metoda() ?
Forum PHP.pl > Forum > PHP > Object-oriented programming
squid
  1. <?php
  2. $zmienna::metoda()
  3. ?>

czy mozna uzyc czegos takiego?, w zasadzie to zdaje mi sie ze nie bo jak to robie to dostaje kosmiczny komunikat o bledzie ale moze cos robie nie tak?
moze jest jakis sposob zeby "oszukac" php?
Ace
mysle ze mozna pokombinowac troche z funkcja eval(); ... przy jej uzyciu napewno by sie dalo to wykonac.
dr_bonzo
Chyba mozna uzyc call_user_func() czy jakos tak.
Nievinny
@dr_bonzo -> pod warunkiem, że zmienna jest obiektem oczywiście
Wtedy będzie mniej więcej tak:
  1. <?php
  2.  
  3. call_user_func_array( array( $oVar, $sMethod ), array( $mArg1, $mArg2, ... ) );
  4.  
  5. ?>

Pisane z głowy.

A poprzez operator :: nie da się, można tylko do właściwiości statycznych i metod klay.
A więc np: SomeClass::someMethod();
squid
sek w tym ze musze sie odwolywac do metody statycznej po to zeby dostac referencje do obiektu bo tu uzywam singleton'u. Pobieram z konfiguracji baze danych z jaka dziala program i chcialem tworzyc obiekty klasy odpowiedzialej za zapytania do bazy przy pommocy:
$zmienna_z_konfiguracji::getInstance();

ale sie tak chyba nie da, jedyne co mi teraz do glowy przychodzi to zrobic old fashon way czyli uzyc switcha ale jestem otwarty na propozycje winksmiley.jpg
dr_bonzo
@Nievinny: zgadza sie, po prostu nie pamietalem tego "szczegolu" smile.gif

Ja uzywalem eval() i sprawdzalo sie.
NuLL
  1. <?php
  2.  
  3. $instancja={$zmienna_z_konfiguracji}::getInstance();
  4.  
  5. ?>


Sprawdz to ale nie jestem pewien. Jeśli nie to eval poprostu.
Bora
Stałą można pobrać tak , a może jest też podobny sposób na metode.
  1. <?php
  2.  
  3. class Test {
  4. const STALA = 'BLABLABLA';
  5. } 
  6.  
  7. $class = 'Test' ;
  8. echo &#092;"$class::STALA\" . constant(\"$class::STALA\");
  9.  
  10. ?>
squid
Cytat(NuLL @ 2005-05-01 14:15:20)
  1. <?php
  2.  
  3. $instancja={$zmienna_z_konfiguracji}::getInstance();
  4.  
  5. ?>


Sprawdz to ale nie jestem pewien. Jeśli nie to eval poprostu.

wtedy mam:
Parse error: syntax error, unexpected '{'
ebe
  1. <?php
  2.  
  3. //$page = FrontController::getInstance(); to to samo co:
  4.  
  5. $nazwaKlasy = 'FrontController';
  6. $instancja = call_user_func(array($nazwaKlasy, 'getInstance'));
  7.  
  8. ?>


Mi to działa...
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.