Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wywołanie metody klasy wewnątrz funkcji.
Forum PHP.pl > Forum > PHP
fjellah
Witam. Jak można dostać się do metod klasy wewnątrz funkcji, bez używania zmiennych globalnych, ponownego tworzenia jej instancji w ciele funkcji lub ustawiania jej jako metody klasy(bardzo ważne)? Prawdopodobnie jest to proste pytanie, ale od jakiegoś czasu nie programowałem w php i dużo zapomniałem)Pozdrawiam i dzięki za pomoc.
cojack
prześlij do funkcji jako argument, obiekt klasy.
wookieb
Metoda klasy musi być statyczna. albo skorzystać z takich wzorców projektowych jak register, singleton
fjellah
@cojack:a jak to zrobić wstydnis.gif?
cojack
  1. function sample($objTpl, $someVariable){
  2. $objTpl->assign('something',$someVariable);
  3. }
  4.  
  5. $smarty = new Smarty;
  6.  
  7. sample($smarty,'2');
fjellah
Postanowiłem użyć singletona...Wygląda on tak:
  1. <?
  2. class smarty_singleton extends Smarty{
  3. private static $oInstance = false;
  4. static function getInstance()
  5. {
  6. if( self::$oInstance == false )
  7. {
  8. self::$oInstance = new Smarty();
  9. }
  10. return self::$oInstance;
  11. }
  12. private function __construct() {}
  13. }
  14. ?>
Wywołanie
  1. $smarty=smarty_singleton::getInstance();
Plik wyswietl.php
  1. <?
  2. function skroc_link($params){
  3. $linkParams=$params['link'];
  4. $linkParams=explode('/',substr($_SERVER['PATH_INFO'],1));
  5. include 'podstrony/'.$linkParams[0].'.php';
  6. }
  7. //rejestracja funckji
  8. $smarty->register_function('skroc', 'skroc_link');
  9. ?>
Wywołanie funkcji skroc_link w szablonie smarty:
  1. <div id="zaw">{skroc link=$link}</div>
Przykładowo, gdy próbuję zawrzeć stronę(->funkcją skroc_link@ostatnia linia), wszystko działa prawidłowo, tzn. strona wyświetla się. Jednak, gdy próbuję wyświetlić tpla wewnątrz zaincludowanej strony, poprzez $smarty->display('artykuly.tpl');, pojawia się błąd
  1. Fatal error: Call to a member function display() on a non-object in C:\xampp\htdocs\negatyw\podstrony\artykuly.php on line 2
Co trzeba poprawić, żeby metoda była widoczna w funkcji skroc_link, a tym samym, także w pliku dołączanym?
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.