/ / Existuje spôsob, ako prepísať / premenovať / premapovať funkciu v php? - php

Existuje spôsob, ako previesť / premenovať / remapovať funkciu v php? - php

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ď č. 1

Verí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