2012-08-03 27 views
16

मैं सोच रहा हूं कि ऐसी स्थिति में जहां मैं एक कक्षा का विस्तार कर रहा हूं, जो पहले से ही 'उपयोग' कीवर्ड को विशिष्ट नामस्थान का उपयोग करने के लिए उपयोग कर रहा है - क्या मुझे समान नामस्थान का उपयोग करने के लिए विरासत वर्ग के ऊपर एक और 'उपयोग' जोड़ने की आवश्यकता है? इस तरह स्थिति:PHP: क्या कक्षा को विस्तारित करने के लिए नामस्थान को कॉल करने के लिए किसी अन्य 'उपयोग' की आवश्यकता है?

namespace Core; 

use System\Plugin; 

class Front extends Application { } 

और अब नियंत्रक, जो सीधे नाम स्थान के बिना कहा जाता है में (पूर्ण पथ का उपयोग कर):

use System\Plugin; 

class PageController extends Front { } 

या यह रूप में अच्छी तरह 'उपयोग' के बिना काम करते हैं और मुझे अनुमति होगी सिस्टम \ प्लगइन नेमस्पेस का उपयोग करने के लिए:

class PageController extends Front { } 

?

उत्तर

18

नहीं, आपको दोनों फ़ाइलों में "उपयोग" कथन की आवश्यकता है। उपयोग एक फ़ाइल-स्तरीय कीवर्ड है और विरासत से प्रभावित नहीं होता है।

scoping rules for importing और मैन्युअल पृष्ठ के नीचे मैंने जो कहा है उसका वर्णन करने वाला छोटा बॉक्स देखें।

+0

स्पष्ट रूप से अगर फ्रंट क्लास के भीतर मैंने प्लगइन नेमस्पेस के भीतर से किसी ऑब्जेक्ट को तुरंत चालू कर दिया है तो मैं विरासत में 'सिस्टम का उपयोग करें \ प्लगइन' के बिना इसका उपयोग कर सकता हूं। –

+0

बेशक, और आपको हमेशा उपयोग कथन की आवश्यकता नहीं होती है। पूरी तरह से योग्य नामस्थान कार्य का उपयोग करना भी काम करता है। – Lusitanian

+6

यह अच्छा होगा (यानी DRYer) यदि वर्ग अभिभावक वर्गों से 'उपयोग' बयानों का उत्तराधिकारी हो सकता है – hohner