Avatar billede acore Ekspert
26. januar 2010 - 08:52 Der er 4 kommentarer og
1 løsning

Udskiftning af standard-funktion i PHP

Jeg vil gerne "udskifte" koden i en PHP standard-funktion med noget andet.

Årsagen er følgende: Et større mængde samlet kode bruger to funktioner: ereg() og eregi(). De udgår i PHP 5.3, og når man forsøger at bruge dem får man en 'fatal error'. Da de to funktioner nemt kan erstattes med næsten (men ikke helt tilsvarende kald til preg_match() er det let at skrive nye ereg() og eregi() funtioner selv.

Ideen var så at bruge de nyskrevne funtioner, og i stedet for at skulle modificere den eksiserende kode, så skulle jeg bare inkludere 2 nye funktioner. Så vidt så godt.

Men kan man det? Omdefinere en funktion. Hvis jeg bare inkluderer dem, får jeg at vide, at jeg ikke kan omdefinere funtioner (godt nok ikke i 5.3, for det har jeg ikke mulighed for at teste endnu).

PHP manualen har override_function() og redefine_function() som en del af APD (ZEND debuger extension), men de er ikke tilgængelige for mig.
Avatar billede repox Seniormester
26. januar 2010 - 09:00 #1
Uden PECL apd kan du ikke gøre det. Det er det korte, men korrekte svar.
Avatar billede phliplip Nybegynder
26. januar 2010 - 09:27 #2
Den er deprecated fra 5.3 og fjernet fra 6.0. Dvs. du vil få en E_DEPRECATED notice hvis din version er 5.3 < 6.0

Når 6.0 udkommer kan du lave dine egne ereg funktioner uden brok.
Indtil da er du på skidern :)

For at fjerne fejlen skal du lave nogen ændringer i din error_reporting.

error_reporting(E_ALL ^ E_DEPRECATED);

Eller sætte et @ foran alle ereg funktionskald.. men så kunne du lige så godt skifte det til MyEreg og så lave din egen funktion med preg.


Jeg ved ikke om du evt. kunne disable funktionerne i php.ini, og om man så kunne få lov til at lave sine egne.. det må jo komme an på en prøve.
Avatar billede repox Seniormester
26. januar 2010 - 09:40 #3
#2
Det nytter ikke noget at anvende disable_function settingen og forsøge at overskrive den; så det forsøg er ikke nødvendigt.
Avatar billede acore Ekspert
26. januar 2010 - 09:52 #4
Tak for hurtige men nedslående svar. Så behøver jeg ikke tænke mere over det. Løsningen bliver nok at omdøbe alle kald til de to funktioner til noget andet.

@phliplip: Det hjælper ikke at undertrykke fejlen - kaldene har en funktion. Det, du foreslår, fjerner den ikke.

Skulle nogen ønske point, så drop et svar.
Avatar billede phliplip Nybegynder
26. januar 2010 - 10:35 #5
#3 det var også et vildt skud ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester