Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nadpisywanie wbudowanej klasy w PHP
Forum PHP.pl > Forum > PHP > Object-oriented programming
rugby
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.
erix
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ą.
sarxos
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).
rugby
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 {} }
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.