Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z redeklaracją funkcji, jak to obejść gdy moja funkcja jest deklarowana pierwsza?
marcinpl87
post 7.04.2009, 15:26:23
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 22.05.2007

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


Witam

Piszę wtyczkę do popularnego CMS'a i korzystam w niej z kodu biblioteki SOAP.
Jednak pewnego razu natrafiłem na taką konfigurację tego CMSa że była już tam inna wtyczka korzystająca z tej samej biblioteki.
Co się stało?
Otóż CMS najpierw wczytał moją wtyczkę i wszystkie klasy/metody/funkcje z biblioteki SOAP którą włączam do wtyczki przez require_once(); a potem przechodząc przez kod pozostałych wtyczek natrafił na następny includ tej samej biblioteki (już w innej wtyczce) i dostałem komunikat:
  1. Fatal error: Cannot redeclare FUNKCJA()
  2. (previously declared in /MOJA_WTYCZKA.php:906)
  3. in /INNA_WTYCZKA.php on line 924

Jak mam zmodyfikować kod mojej wtyczki żeby nie gryzła się z innymi wtyczkami używającymi tej biblioteki?
Myślałem o przestrzeniach nazw ale będą one dopiero od php 5.3 a jeśli moja wtyczka ma być kiedyś popularna powinna działać też ze starszymi wersjami php.
Ręczna zmiana nazw klas i metod też raczej nie wchodzi w grę bo biblioteki SOAP ma ok. 9000 linii kodu więc trudno byłoby wszystko przeedywać.

z góry dziękuję za pomoc.
Go to the top of the page
+Quote Post
wookieb
post 7.04.2009, 15:29:11
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




http://php.net/function_exists
Daj jej deklaracje w ifa ktory sprawdza czy funkcja istnieje. Jezeli nie to ja deklaruje.


--------------------
Go to the top of the page
+Quote Post
marcinpl87
post 7.04.2009, 17:47:28
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 22.05.2007

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


jak już pisałem najpierw są deklarowane funkcje z biblioteki w mojej wtyczce więc nie ma sensu dawać tam warunku bo w momencie parsowania mojej wtyczki te funkcje nie są zadeklarowane.
problem pojawia się podczas parsowania innych wtyczek, których autorzy nie używali funkcji function_exist ale ja już nie mam na to wpływu niestety
Go to the top of the page
+Quote Post
erix
post 7.04.2009, 22:22:38
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Myślałem o przestrzeniach nazw ale będą one dopiero od php 5.3 a jeśli moja wtyczka ma być kiedyś popularna powinna działać też ze starszymi wersjami php.

Przyjęło się, żeby stosować konwencję function wtyczka_metoda(), jeśli pisane strukturalnie.

Cytat
Jak mam zmodyfikować kod mojej wtyczki żeby nie gryzła się z innymi wtyczkami używającymi tej biblioteki?

Naprawić błąd popełniony przez Ciebie na początku - traktowania skryptu jako "własności" (patrz: wyżej). Jak zmodyfikować? Dodaj sobie prefiks do metod.

Cytat
Ręczna zmiana nazw klas i metod też raczej nie wchodzi w grę bo biblioteki SOAP ma ok. 9000 linii kodu więc trudno byłoby wszystko przeedywać

A mało to edytorów z funkcją zamiany wg wyrażeń regularnych?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 19.06.2025 - 22:01