Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Nadpisywanie wbudowanej klasy w PHP
rugby
post
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 1
Dołączył: 21.05.2009

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


Chcę zrobić swoją wersję klasy Memcache, która będzie miała te same metody i pola co klasa wbudowana w PHP i żeby moja klasa zastępowała oryginalną klasę Memcache. Dodatkowym utrudnieniem jest to, że klasa Memcache nie zawsze jest dostarczana wraz z PHP, a ja chcę żeby każdy mógł wywołać moją klasę tak:
  1. require_once "Memcache.php";
  2.  
  3. $m = new Memcache(...); //niezależnie czy Memcache jest już wbudowane w PHP czy nie, ma się ładować mój zamiennik


Mógłbym nazwać klasę MyMemcache i potem napisać:
  1. if(!class_exists("Memcache")) class_alias("MyMemcache", "Memcache");

albo użyć namespace, ale to dopiero od PHP 5.3, a ja chcę żeby to działało w PHP 5.2.


--------------------
Juvenia Kraków Rugby Klub
Pobierz Google Chrome!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
erix
post
Post #2





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




Z tego, co wiem, to nie ma możliwości przeciążania w PHP istniejących klas.

Jedyne, co pozostaje, to rozszerzać albo aliasować i instancjować Twoją rozszerzającą klasę, a nie podstawową.


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

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
sarxos
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 15.06.2011

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


Skoro ktoś chciałby wołać Twoją klasę to możesz nazwać ją po prostu inaczej. Z drugiej strony jeśli by miała być zamiennikiem dla nie istniejącej wbudowanej klasy, to mozesz łatwo zaincludować ją wpierw sprawdzając przez class_exists(..) czy taka juz istnieje, a następnie robiąc alias na Twoją nazwę (lub nie robiąc wcale, jeśli ma byc tylko zamiennikiem).

Ten post edytował sarxos 15.06.2011, 14:02:25
Go to the top of the page
+Quote Post
rugby
post
Post #4





Grupa: Zarejestrowani
Postów: 61
Pomógł: 1
Dołączył: 21.05.2009

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


To jest właśnie to, co zaproponowałem na początku. A żeby było kompatybilne z PHP<5.3.0, można zrobić tak:
  1. if(!class_exists("Memcache")) { class Memcache extends MyMemcache {} }


--------------------
Juvenia Kraków Rugby Klub
Pobierz Google Chrome!
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 Aktualny czas: 20.08.2025 - 11:52