PHP नामस्थान और "उपयोग"




सूडान कैसा देश है (2)

मुझे नेमस्पेस और use कथन के साथ थोड़ा परेशानी हो रही है।

मेरे पास तीन फाइलें हैं: ShapeInterface.php , Shape.php और Circle.php

मैं सापेक्ष पथों का उपयोग करके ऐसा करने की कोशिश कर रहा हूं इसलिए मैंने इसे सभी वर्गों में रखा है:

namespace Shape; 

मेरी सर्कल कक्षा में मेरे पास निम्न है:

namespace Shape;
//use Shape;
//use ShapeInterface;

include 'Shape.php';
include 'ShapeInterface.php';    

class Circle extends Shape implements ShapeInterface{ ....

अगर मैं बयान include करता हूं तो मुझे कोई त्रुटि नहीं मिलती है। अगर मैं use कथन use प्रयास करता हूं तो मुझे मिलता है:

घातक त्रुटि: क्लास 'आकार \ आकार' लाइन 8 पर /Users/shawn/Documents/work/sites/workspace/shape/Circle.php में नहीं मिला

क्या कोई मुझे इस मुद्दे पर थोड़ा सा मार्गदर्शन दे सकता है?


use ऑपरेटर कक्षाओं, इंटरफेस या अन्य नामस्थानों के नाम पर उपनाम देने के लिए है। अधिकांश use कथन एक नामस्थान या कक्षा को संदर्भित करते हैं जिसे आप छोटा करना चाहते हैं:

use My\Full\Namespace;

के बराबर है:

use My\Full\Namespace as Namespace;
// Namespace\Foo is now shorthand for My\Full\Namespace\Foo

यदि use ऑपरेटर का उपयोग कक्षा या इंटरफ़ेस नाम के साथ किया जाता है, तो इसमें निम्न उपयोग हैं:

// after this, "new DifferentName();" would instantiate a My\Full\Classname
use My\Full\Classname as DifferentName;

// global class - making "new ArrayObject()" and "new \ArrayObject()" equivalent
use ArrayObject;

use ऑपरेटर को autoloading साथ भ्रमित नहीं किया जाना चाहिए। एक ऑटोलोडर (उदाहरण के साथ spl_autoload_register ) पंजीकृत करके एक वर्ग स्वत: लोड हो जाता है ( include करने की आवश्यकता को अस्वीकार कर रहा है)। उपयुक्त ऑटोलोडर कार्यान्वयन देखने के लिए आप PSR-4 पढ़ना चाहेंगे।


इसे रखने का सबसे आसान तरीका

यदि आपको अपना कोड नेमस्पेस में ऑर्डर करने की आवश्यकता है, तो बस कीवर्ड namespace उपयोग करें।

File1.php namespace foo\bar;

File2.php $obj = new foo\bar\myObj();

इस कहानी के लिए अभी भी थोड़ा और - उपयोगशब्द कीवर्ड।

यदि आप फ़ाइल 2 में कहते use foo\bar as mypath इसका मतलब है कि आपको फ़ाइल में कहीं भी foo\bar बजाय mypath का उपयोग करने की आवश्यकता है। '

$obj  = new mypath\myObj();

यदि आपने कहा था कि use foo\bar का use foo\bar as bar किया गया है तो यह use foo\bar as bar का use foo\bar as bar करने के बराबर है







use