Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana funkcji na inna
Forum PHP.pl > Forum > PHP
treewood
Czy jest jakas metoda lub funkcja dzieki, ktorej mozna zdefiniowac albo ignorowac funkcje, ktore sa gdzies wczesniej zadeklarowane a chce sie je zastapic?

Przykladowo jest funkcja do wyswietlania czegos tam i chce zrobic plugin, ktory by dzialal w podobny sposob co dana funkcja ale robil jeszcze jakies operacje wewnatrz. I teraz ... nazwa funkcji bylaby ta sama jednak nie moge zadeklarowac dwa razy tej samej nazwy funkcji a jednak chcialbym by jedna druga zastepowaly.

Oczywiscie ma to zastosowanie w przypadku istnienia przykladowej aplikacji, ktora dziala jak dziala i nie chce jej zmieniac a wystarczy wgrac plugin i zastapic dana funkcje.

Dobra maslo maslane ... przyklad ponizej:

  1. <?php
  2.  
  3. function a( ){
  4.  return 'a';
  5. }
  6.  
  7. // plugin, ktory by zastapil ja
  8. function a( ){
  9.  return 'aa';
  10. }
  11.  
  12. ?>
sf
Nie mozna. Chyba, ze zrobisz tak, ze 1 wgrywasz druga nie, albo 2 wgrywasz pierwsza nie tongue.gif Zaslanianie nie ma sensu poniewaz w php nie trzeba deklarowac funkji na poczatku... jak uzyjemy sobie jej w srodku, a jej definicja jest na koncu to on i tak ja widzi. Wiec jakby mial rozpoznawac, do ktorej funkcji sie odwolujesz? tongue.gif
hawk
Można to zrobić na obiektach. Mieć jakiegoś class loadera, w którym aplikacja/pluginy rejestrują klasy, i który, jak trzeba wczytać kod klasy, sprawdza gdzie jest dostępna najnowsza wersja danej klasy i robi odpowiedni require_once.

OOP rulez biggrin.gif
treewood
Ostatecznie mozna przez function_exists( ); ale nie jest to idealne wyjscie ...

  1. <?php
  2.  
  3. if( !function_exists( 'a' ) ){
  4.   function a( ){
  5.    return 'a';
  6.  }
  7. }
  8.  
  9. // plugin
  10. function a( ){
  11.   return 'aa';
  12. }
  13. ?>


dla testu zrobilem tak na przykladowo 50 funkcjach. zwyczajnie wstawilem if'a przed funkcja i myslalem, ze generacja bedzie wygladala o wiele gorzej a odziwo roznica byla w granicach bledu bo ok. +/- 0.001 sek
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.