Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> $tmp = $inst->$funkcja, wywoływanie metody, ktorej nazwa przekazywana jest w zmiennej
sikorat
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 7.04.2003
Skąd: Warszawa

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


Dzien dobry.
Nazwa katalogu w ktorym znajduje sie pozadany plik php, nazwa tego pliku php, klasy w nim zawartej i metody do wywolania sa przekazywane w zmiennych. W ten sposob chce stworzyc w miare uniwersalny sposob nawigacji programu po swoim kodzie, bez koniecznosci dopisywania kolejnych odwolan gdy bede dodawac nowe moduly.

Problem polega na tym ze wywołanie metody przez przekazanie jej nazwy w zmiennej
  1. <?php
  2. $tmp = $inst->$funkcja
  3. ?>
nie działa.

Poniżej troszke więcej kodu.

  1. <?php
  2. //tablica module odpowiada istniejacym folderom
  3. $this->module = array(
  4. 1=>'Deliverers',
  5. 2=>'Parametrisation',
  6. 3=>'Customers'
  7. );
  8.  
  9. //tablica act odpowiada nazwom plikow php w danym module
  10. $this->act = array(
  11. 11=>'MainDeliverers',
  12. 21=>'MainParametrisation'
  13. );
  14.  
  15. //ogladacz strony w trakcie jej przegladania i wciskania guzikow zapisuje do sesji
     identyfikator module-czyli nazwy katalogu i id act czyli nazwy pliku i taki plik zostaje zainkludowan
    y do aktywnego skryptu
  16. $include_file = MAIN_FOLDER.SLASH.$this->module[$_SESSION['module']].SLASH.$this->act[$_SESSION['act']].'.php';
  17. include($include_file);
  18. // nazwa klasy jest u mnie zawsze taka sama jak nazwa pliku php
  19. $klasa  = $this->act[$_SESSION['act']];
  20. //nazwa funkcji jest u mnie zawsze taka sama jak nazwa klasy + przedrostek
  21. $funkcja = FNC_PREFIX.$klasa.'()';
  22. //tu jeszcze dziala - wchodzi do konstrukta
  23. $inst = new $klasa;
  24. //tu juz nie dziala i zwraca komunikat
  25. $tmp = $inst->$funkcja;
  26. return $tmp;
  27. ?>


Treść zwracanego komunikatu brzmi tak:
Notice: Undefined property: MainDeliverers::$FncMainDeliverers() in \functionality\UrlNavigator.php on line 35
gdzie MainDeliverers:: pochodzi ze zmiennej $inst, a $FncMainDeliverers() ze zmiennej $funkcja.

starałem się rozwiązać problem przez
  1. <?php
  2. $tmp = call_user_func(array($klasa, $funkcja));
  3. ?>
, ale nie działa i przez
  1. <?php
  2. $tmp = eval($inst->$funkcja);
  3. ?>
, ale tez nie dziala.
moja uwage zwrocila tez obecnosc znaku $ w nazwie funkcji w zwracanym przez przegladarke komunikacie.

czy ktos moze mi pomoc w rozwiazaniu tego problemu?

pozdrawiam
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 17:44