Viem, že je to možné v inom jazyku, ako je C ++alebo Obj-c even (at runtime AND compile time) but there is a way to override / rename / remap function in php? Čo tým myslím je, povedzme, že chceme nahradiť implementáciu mysql_query. Je to možné?
SOME_REMAP_FUNCTION(mysql_query, new_mysql_query);
//and then you define your new function
function new_mysql_query(blah...) {
//do something custom here
//then call the original mysql_query
mysql_query(blah...)
}
Takto môže zvyšok kódu transparentne volať funkciu mysql_query a nevie, že sme do stredu vložili nejaký vlastný kód.
odpovede:
2 pre odpoveď č. 1Verím, že ak využijete menné priestory, môžete napísať novú funkciu s rovnakým názvom a „oklamať“ systém týmto spôsobom. Tu je krátky blog, o ktorom som čítal ...
http://till.klampaeckel.de/blog/archives/105-Monkey-patching-in-PHP.html
2 pre odpoveď č. 2
Ako hovorí ianhales, môžete to urobiť pomocou rozšírenia APD alebo alternatívne pomocou runkit Obe rozšírenia majú v sebe mnoho ďalších užitočných, ale obe môžu váš systém zlomiť zvláštnym a exotickým spôsobom, ak ich použijete v internetových serveroch orientovaných na internet.
Lepším riešením je prepísať kód, keď ho nasadíte (dá sa to urobiť automaticky, napr. Pomocou sed), možno s využitím auto_prepend.
C.
0 pre odpoveď č. 3
Nie v PHP ako je stiahnuté z php.net. Existuje rozšírenie, ktoré to umožňuje.
A ak ste po mysql funkciách, ktoré hľadáte, lepšie sa pozrite na rozšírenie triedy mysqli.
0 pre odpoveď č. 4
http://php.net/manual/en/function.override-function.php Môže to mať nejaké využitie. Vrchný komentár znie presne ako príklad, ktorý ste zverejnili. Používa však rozšírenie PECL.
0 pre odpoveď č. 5
Lepší nápad by bolo použiť od začiatku abstrakčnú vrstvu, ako napr PDO. PDO sa dodáva s PHP 5.1 a novším a je k dispozícii ako rozšírenie PECL pre PHP 5.0.x.
0 pre odpoveď č. 6
Ak máte funkcie v triede. Môžeme to prepísať z inej triedy, ktorá to zdedila.
príklad
class parent {
function show() {
echo "I am showing";
}
}
class mychild extends parent {
function show() {
echo "I am child";
}
}
$p = new parent;
$c = new mychild;
$p->show(); //call the show from parent
$c->show(); //call the show from mychild
0 pre odpoveď č. 7
Prečo svoje funkcie jednoducho nezabalíte do menného priestoru?
namespace MySQL
{
function connect()
{
//Blah
}
}
a potom použite takto:
<?php
mysql_connect(); //Native Version
MySQLconnect(); //Your Version