Calling a PHP function defined in another namespace without the prefix -


जब आप एक नेमस्पेस में फ़ंक्शन परिभाषित करते हैं,

  नामस्थान foo {function bar () {Echo "foo! \ N"; } क्लास MyClass {}}  

आपको इसे अन्य (या वैश्विक) नाम स्थान से कॉल करते समय नाम स्थान निर्दिष्ट करना होगा:

  बार (); // अपरिभाषित फ़ंक्शन \ bar को कॉल करें () foo \ bar (); // ठीक   

वर्गों के साथ आप "उपयोग" कथन को प्रभावी ढंग से वर्तमान नाम स्थान में एक वर्ग को आयात करने के लिए उपयोग कर सकते हैं [संपादित करें: मैंने सोचा था कि कक्षाएं प्राप्त करने के लिए आप "फू" का इस्तेमाल कर सकते हैं, लेकिन जाहिरा तौर पर नहीं।]

  उपयोग foo \ MyClass MyClass के रूप में; नया MyClass (); // ठीक है, foo \ MyClass का तत्काल  

लेकिन यह फ़ंक्शंस के साथ काम नहीं करता [और यह कितना है कि वह कितने हैं]:

  उपयोग करें बार के रूप में foo \ bar; बार (); // कॉल अपरिर्धारित फ़ंक्शन \ bar ()  

आप टाइप करने के लिए उपसर्ग को कम करने के लिए नामस्थान उपनाम कर सकते हैं,

  एफ के रूप में उपयोग करें f; // अधिक उपयोगी यदि "foo" बहुत लंबा या नेस्टेड f \ bar () था; // ok  

लेकिन क्या उपसर्ग को पूरी तरह से हटाने का कोई तरीका है?

पृष्ठभूमि: मैं हॅमक्रिस्ट मिलान लाइब्रेरी पर काम कर रहा हूं जो बहुत फैक्टरी कार्यों को परिभाषित करता है , और उनमें से कई नेस्टेड होने के लिए डिज़ाइन किए गए हैं। नेमस्पेस उपसर्ग होने के बाद वास्तव में अभिव्यक्तियों की पठनीयता को मारता है। तुलना करें

  assertThat ($ नाम, है (anArray (equalTo ('ऐलिस'), शुरू होता है ('बॉब'), कुछ भी (), लैलेन्थ (लैटस्ट (12))));  

से

  h के रूप में उपयोग करें h; H \ assertThat ($ names, h \ है (h \ anArray (h \ बराबर '' ऐलिस ''), h \ प्रारंभ होता है ('बॉब'), एच \ कुछ (), एच \ हैथ लैंग (एच \ लेस्ट (12)) )));  

नीचे दिए गए हेल्पर हैक्स को जोड़कर, आप हैमक्रिस्ट नेमस्पेस से लेकर वर्तमान तक सब कुछ आयात कर सकते हैं कॉल करके नाम स्थान:

  import_namespace ('हैमक्रेस्ट', __NAMESPACE__);  

ये हैक्स हैं, function_alias फ़ंक्शन पर काम करने के अलावा काम करता है:

  function function_alias ($ मूल, $ alias) {$ args = func_get_args ( ); जोर दें ('गणना ($ एजीआर) == 2', 'function_alias (): बिल्कुल दो तर्कों की आवश्यकता है'); जोर दें ('is_string ($ मूल) & amp; is_string ($ उर्फ)', 'function_alias (): स्ट्रिंग तर्क की आवश्यकता है'); // मान्य फ़ंक्शन का नाम - http://php.net/manual/en/functions.user-defined.php जोर ('प्रीग_मैच (\' / ^ [a-zA-Z_ \ x7f- \ xff] [\\\ \\\\\ a-zA-Z0-9_ \ x7f- \ xff] * $ / \ ', $ मूल) & gt; 0', 'function_alias ():' $ मूल 'एक मान्य फ़ंक्शन नाम नहीं है); जोर दें ('preg_match (\' / ^ [a-zA-z_ \ x7f- \ xff] [\\\\\\\\ a-zA-Z0-9_ \ x7f- \ xff] * $ / \ ', $ उपनाम) & gt; 0 ',' function_alias (): '$ alias' एक मान्य फ़ंक्शन नाम नहीं है);); $ उपनाम नामस्थान = substr ($ alias, 0, strrpos ($ alias, '\\')! == गलत? Strrpos ($ alias, '\\'): 0); $ AliasName = substr ($ alias, strrpos ($ alias, '\\')! == गलत? Strrpos ($ alias, '\\') + 1: 0); $ SerializedOriginal = var_export ($ मूल, सच); Eval ("namespace $ alias नामस्थान {function $ aliasName} (return call_user_func_array ($ serializedOriginal, func_get_args ());}}"); }  

नामस्थान आयातक के साथ:

  फ़ंक्शन import_namespace ($ source, $ destination) {$ args = func_get_args (); जोर दें ('गणना ($ एआरजी) == 2', 'import_namespace (): बिल्कुल दो तर्कों की आवश्यकता है'); जोर दें ('is_string ($ स्रोत) & amp; is_string ($ गंतव्य)', 'import_namespace (): स्ट्रिंग तर्कों की आवश्यकता है'); // मान्य फ़ंक्शन नाम - http://php.net/manual/en/functions.user-defined.php जोर ('preg_match (\' / ^ ([a-zA-z_ \ x7f- \ xff] [\\ $ '\', $ Source) & gt; 0 ',' import_namespace (): '$ गंतव्य' मान्य नेमस्पेस नाम नहीं है "); जोर ( 'preg_match (\' / ^ ([a-zA-Z_ \ x7f- \ xff] [\\\\\\\\ a-zA-Z0-9_ \ x7f- \ xff] *)? $ / \ ', $ गंतव्य) & gt; 0', 'import_namespace ():' $ source 'एक वैध नेमस्पेस नाम नहीं है "); Foreach (get_declared_classes () $ वर्ग के रूप में) (यदि स्ट्रॉप्स ($ वर्ग, $ source। '\\') === 0) class_alias ($ वर्ग, $ गंतव्य। ($ गंतव्य? '\\': '') उपस्ट्रस्ट ($ वर्ग, स्ट्रेलन ($ स्रोत। '\\'))); $ फ़ंक्शंस = get_defined_functions (); (स्ट्रक्शंस ($ फ़ंक्शन, $ स्रोत। '\\') === 0) function_alias ($ फ़ंक्शन, $ $) [$ function $ $] [$ function, $ function ['internal'], $ functions ['user']) $ फ़ंक्शन के रूप में गंतव्य ($ गंतव्य? '\\': '')। Substr ($ फ़ंक्शन, स्ट्रेलन ($ स्रोत। '\\'))); }  

Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -