/ / Php में फ़ंक्शन को ओवरराइड / रीनेम / रीमैप करने का एक तरीका है? - php

PHP में फ़ंक्शन ओवरराइड / नाम बदलने / रीमेप करने का कोई तरीका है? - PHP

मुझे पता है कि यह C ++ जैसी अन्य भाषा में संभव हैया ओबज-सी भी (रनटाइम और संकलन समय पर) लेकिन क्या php में फ़ंक्शन को ओवरराइड / रीनेम / रीमैप करने का एक तरीका है? तो मेरा क्या मतलब है, हम कहते हैं कि हम mysql_query के कार्यान्वयन को बदलना चाहते हैं। क्या यह संभव है?

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...)
}

इस तरह से बाकी कोड पारदर्शी रूप से mysql_query फ़ंक्शन को कॉल कर सकते हैं और यह नहीं जानते कि हमने बीच में कुछ कस्टम कोड डाले हैं।

उत्तर:

जवाब के लिए 2 № 1

मेरा मानना ​​है कि यदि आप ऐसे नामस्थानों का उपयोग करते हैं, तो आप उसी नाम से नया फ़ंक्शन लिख सकते हैं और उस तरीके से सिस्टम को "ट्रिक" कर सकते हैं। यहाँ एक छोटा ब्लॉग है जिसके बारे में मैंने पढ़ा है ...

http://till.klampaeckel.de/blog/archives/105-Monkey-patching-in-PHP.html


जवाब के लिए 2 № 2

जैसा कि ianhales का कहना है कि आप APD एक्सटेंशन का उपयोग करके या वैकल्पिक रूप से इसके साथ कर सकते हैं runkit दोनों एक्सटेंशन में बहुत सारे अन्य उपयोगी हैं, लेकिन दोनों ही आपके सिस्टम को अजीब और विदेशी तरीके से तोड़ सकते हैं यदि आप उन्हें इंटरनेट पर सामना करने वाले वेबसर्वर्स पर लागू करते हैं।

एक बेहतर समाधान यह है कि जब आप इसे तैनात करते हैं तो कोड को फिर से लिखना है (यह स्वचालित रूप से किया जा सकता है। sed का उपयोग करके) शायद auto_prepend का उपयोग करना।

सी।


जवाब के लिए 0 № 3

PHP में नहीं जैसा कि php.net से डाउनलोड किया गया है। एक विस्तार है जो हालांकि यह अनुमति देता है।

और अगर ये mysql फ़ंक्शंस हैं, तो आप mysqli क्लास को बढ़ाने में बेहतर हैं।


जवाब के लिए 0 № 4

http://php.net/manual/en/function.override-function.php यह कुछ काम का हो सकता है। शीर्ष टिप्पणी बिल्कुल आपके द्वारा पोस्ट किए गए उदाहरण की तरह लगती है। हालांकि यह एक PECL एक्सटेंशन का उपयोग करता है।


जवाब के लिए 0 № 5

एक बेहतर विचार शुरू से ही एक अमूर्त परत का उपयोग करना होगा, जैसे कि पीडीओ। PHP 5.1 और नए के साथ पीडीओ जहाज, और PHP 5.0.x के लिए PECL एक्सटेंशन के रूप में उपलब्ध है


जवाब के लिए 0 № 6

यदि आपके पास कक्षा के अंदर कार्य हैं। हम इसे अन्य वर्ग से विरासत में प्राप्त कर सकते हैं।

उदाहरण

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 № 7

क्यों न आप अपने कार्यों को केवल एक नाम स्थान पर लपेटें

namespace MySQL
{
function connect()
{
//Blah
}
}

और फिर इस तरह का उपयोग करें:

<?php

mysql_connect(); //Native Version
MySQLconnect(); //Your Version