2010-10-13 16 views
7

मेरे पास स्क्रिप्ट है जिसमें basename() का उपयोग 100-1000 समय का होता है, मैं बस सोच रहा था कि क्या हम सभी स्क्रिप्ट में फ़ंक्शन नाम को बदलने के बजाय फ़ंक्शन को ओवरराइड कर सकते हैं।डिफ़ॉल्ट php फ़ंक्शन को ओवरराइड करें

basename() के साथ समस्या यह है कि यह विदेशी भाषाओं में फ़ाइलों के नामों के साथ अच्छी तरह से काम नहीं करता है। मुझे php साइट http://php.net/manual/en/function.override-function.php पर एक मिला लेकिन इसे PECL किसी अन्य विकल्प की आवश्यकता है?

+4

एक संबंधित नोट पर, अगर यह अच्छी तरह से काम नहीं करता है, http://bugs.php.net/ – Artefacto

+0

@Artefacto में एक बग रिपोर्ट भेजने के बाद, कभी कभी वे न सिर्फ यह पीछे की ओर compat मुद्दों की वजह से बदल सकते हैं। – Pacerier

उत्तर

7

आप मौजूदा फ़ंक्शन नाम ओवरराइड करने के लिए नामस्थान का उपयोग कर सकते हैं:

namespace blarg; 
function basename() { 
    return 'whatever'; 
} 
$base = basename(); 

Ie, basename के लिए किसी भी कॉल() ब्लैग नेमस्पेस के भीतर फ़ंक्शन के आपके नए संस्करण का उपयोग करेगा।

+3

याद रखें कि नामस्थान केवल PHP 5.3 और बाद में समर्थित हैं। – BoltClock

+0

किसी फ़ंक्शन को ओवरराइड करने का प्रयास करने से परिणामस्वरूप 'फ़ंक्शन पहले से मौजूद है' त्रुटि होगी। 5.3 की कमी: एक फ़ंक्शन 'xbasename()' बनाएं जो गैर-ansi वर्णों को संभालने के लिए किसी अन्य विधि के साथ सही बेसनाम फ़ंक्शन को समाहित करता है। फिर, CTRL-A और CTRL-H ... मुझे यकीन है कि हर कोई बाकी को जानता है। –

+0

कभी-कभी मूल कार्य को कॉल करने के लिए कार्यान्वयन आवश्यकताओं को ओवरराइड करता है। इस उदाहरण में मूल बेसनाम को नए बेसनाम से कॉल करने का कोई तरीका है? –

1

आप basename कॉल करने से पहले स्थान बदल सकते हैं:

setlocale(LC_ALL, 'en_US.UTF8'); 

setlocale

2

एक विकल्प runkit होगा। लेकिन अधिकांश सर्वरों पर यह सक्षम होने की संभावना नहीं है।

संबंधित मुद्दे