2011-09-19 11 views
6

का उपयोग कर सी # के समतुल्य वर्तमान फ़ाइल में उस नामस्थान के सभी वर्गों को उपलब्ध कराने के लिए सी # using Name.Space; कथन के बराबर क्या है? क्या यह PHP के साथ भी संभव है?PHP नामस्थान:

मैं क्या चाहते हैं (लेकिन काम नहीं करता है):

<?php 
# myclass.php 
namespace Namespace; 
class myclass { 
} 
?> 

<?php 
# main.php 
include 'myclass.php' 
use Namespace; 

new myclass(); 
?> 

उत्तर

8

कोई भी नहीं है। PHP में दुभाषिया उन सभी वर्गों को नहीं जानता जो संभवतः मौजूद हो सकते हैं (विशेष रूप से __autoload के अस्तित्व के कारण) ताकि रन-टाइम कई संघर्षों में चल रहा हो। कुछ इस तरह हो रही है:

use Foo\*; // Invalid code 
throw new Exception(); 

वहाँ एक फू \ अपवाद जो __autoload एड होना चाहिए ई सकता है - पीएचपी पता नहीं कर सकते हैं।

use Foo\Bar; 
$o = new Bar\Baz(); // Is Foo\Bar\Baz 

या अन्य नाम के साथ:

use Foo\Bar as B; 
$o = new B\Baz(); // Is Foo\Bar\Baz 
+0

यह संभव PHP के लिए केवल autoload करने के लिए एक वर्ग होना चाहिए अगर यह सभी मौजूदा (और आयातित) नामस्थान में नहीं मिला था। यदि मैंने उस नामस्थान के साथ उचित रूप से परिभाषित (शामिल) प्राप्त की गई प्रत्येक कक्षा में नामस्थान आयात किया है तो उसे कॉल करने योग्य होना चाहिए। – knittl

+0

इससे प्रत्येक संदर्भित कक्षा नाम के लिए प्रत्येक आयातित नामस्थान के लिए ऑटोलोडर को कॉल करने के लिए बड़ी संख्या में ऑटोलोड लोड की आवश्यकता होगी। एक ऑटोलोड लोड मानना ​​सापेक्ष महंगा है (फाइल सिस्टम को देखकर) यह काफी उल्लेखनीय है। – johannes

+0

उल्लेख नहीं है, मैं कक्षाओं को _during_ स्क्रिप्ट निष्पादन वाली फाइल बनाना चाहता हूं और फिर उन्हें उपयोग करने के लिए शामिल कर सकता हूं (एक असंभव, और शायद बहुत बुद्धिमान परिदृश्य नहीं, लेकिन फिर भी PHP ऐसा कर सकता है) – Mchl

0

के रूप में समझाया Johannes या आप अपनी कक्षाओं aliases कर सकते हैं

घोषणा:

आप क्या कर सकते हैं एक उप नाम स्थान आयात है

namespace myNamespace; 

class myClass { 
    public function __toString() 
    { 
     return "Hello world!"; 
    } 
} 

निष्पादन:

include 'namespace.class.php'; 

use myNamespace\myClass as myClass; 

echo new myClass(); 
+1

जो मैंने पूछा नहीं। मुझे पता है कि मैं एकल वर्ग (और उन्हें उपनाम) आयात कर सकता हूं, लेकिन यह मेरी समस्या नहीं है – knittl

+0

ओह क्षमा करें, मुझे पता है कि आप नामस्थानों का उपयोग सी # (मुझे भी!) के रूप में करना चाहते हैं, लेकिन जैसा कि समझाया गया है जॉनस अब के लिए संभव नहीं है .. मैं एलियासिंग क्लास तकनीक बल्कि उप-नामस्थान के साथ योगदान देना चाहता था। – corretge