2012-02-14 17 views
11

साथ एक एकल फाइल में नेमस्पेस मैं एक फ़ाइल है कि आवश्यकता होती है() 'सा नाम स्थान, जैसे:PHP: एक वैश्विक नाम स्थान

<?php 
require_once('Beer.php'); // This file contains the Beer namespace 

$foo = new Beer\Carlsburg(); 
?> 

मैं एक ही फाइल में सीधे बीयर नाम स्थान डाल करने के लिए चाहते हैं,

<?php 
namespace Beer { 
    class Carlsburg {} 
} 

$foo = new Beer\Carlsburg(); 
?> 

हालांकि, पीएचपी दुभाषिया शिकायत है कि No code may exist outside of namespace: इस (unworking) उदाहरण की तरह। इसलिए मैं नामस्थान में $foo घोषणा को लपेट सकता हूं, लेकिन फिर मुझे उस नामस्थान में बीयर को भी एक्सेस करने के लिए लपेटना होगा! यहाँ मैं क्या से बचने के लिए कोशिश कर रहा हूँ की एक काम उदाहरण है:

<?php 
namespace Main\Beer { 
    class Carlsburg {} 
} 

namespace Main { 
    $foo = new Beer\Carlsburg(); 
} 
?> 

किसी भी तरह से फ़ाइल में Beer नाम स्थान के लिए कोड है, फिर भी अपने स्वयं के नाम स्थान में $foo घोषणा रैप नहीं शामिल करने के लिए वहाँ है (छोड़ यह वैश्विक नामस्थान में)?

धन्यवाद।

+0

में इस

namespace Beer { class Carlsburg {} } //global scope namespace { $foo = new Beer\Carlsburg(); } 

उदाहरण # 3 के अनुसार प्रयास करें आप नाम स्थान के रूप में हेनेकेन होना चाहिए! – marko

उत्तर

15

आप ग्लोबल नेम स्पेस का उपयोग करना चाहिए।

+0

यह तब तक काम नहीं करेगा जब तक आप '$ foo = new Main \ Beer \ Carlsburg() लिखते हैं; ' –

+0

@skwee oops ... क्षमा करें - प्रश्न – ManseUK

+2

से मिलान करने के लिए अपडेट किया गया है या' उपयोग' का उपयोग करें, http: // stackoverflow देखें। कॉम/ए/9274472/367456 – hakre

2

नाम स्थान नाम से पहले एक बैकस्लैश रखने का प्रयास करें:

$beer = new \Beer\Carlsberg(); 

प्रारंभिक बैकस्लैश "वैश्विक नाम स्थान" के लिए अनुवाद किया है। यदि आप अग्रणी बैकस्लैश नहीं डालते हैं, तो कक्षा का नाम वर्तमान नामस्थान में अनुवादित किया जाता है। यह कोई "नाम" है,>http://php.net/manual/en/language.namespaces.definitionmultiple.php

3

बस इसे लिखने -

<?php 
namespace Beer { 
    class Carlsburg {} 
} 


namespace { // global code 
    $foo = new Beer\Carlsburg(); 
} 
?> 

यहाँ देखें:

<?php 
namespace Main\Beer { 
    class Carlsburg {} 
} 

namespace { 
    use Main\Beer; 
    $foo = new Beer\Carlsburg(); 
} 
?> 

Demo और Defining multiple namespaces in the same fileDocs देख

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