2011-03-17 14 views
7

मैं बाहरी पुस्तकालय का उपयोग करने की कोशिश कर रहा हूं। क्योंकि वहाँ कुछ मतभेद मैं नामस्थान उपयोग कर रहा हूँ (php 5.3) हैंPHP नामस्थान समस्या

लक्ष्य बिल्कुल

समस्या पुस्तकालय के अंदर है (बस शीर्ष पर नामस्थान जोड़ने) बाहरी पुस्तकालय को बदलने के लिए नहीं कर रहा है कई स्थितियों कि

  • is_a($obj,'3thpartyclassname') काम नहीं करते अगर मैं 3thpartyclassname के सामने नाम स्थान जोड़ने के ही काम करता है कर रहे हैं
  • 3th पक्ष के स्थानीय कक्षाओं का उपयोग करता है लेकिन वे केवल काम नहीं करते अगर मैं वैश्विक अंतरिक्ष apped (new \Exception)

इस काम को कोई संशोधन के साथ बनाने का कोई तरीका नहीं है?

अद्यतन अपवाद के रूप में \ अपवाद का उपयोग करें; समस्या ठीक करें 2

मुझे केवल is_a और is_subclass_of के साथ समस्याएं हैं I दोनों को नामस्थान की आवश्यकता है और वर्तमान नामस्थान को अनदेखा करें।

उत्तर

12

नहीं, आप कुछ संशोधनों

namespace My\Own\Namespace;    // declare your own namespace 
use My\ThirdParty\Component;    // import 3rd party namespace 
$component = new Component;    // create instance of it 
var_dump(is_a($component, 'Component')); // FALSE 
var_dump($component instanceof Component); // TRUE 

is_a और is_subclass_of तरीकों पूरी तरह से योग्य classname में डालने के लिए (नाम स्थान सहित) की आवश्यकता क्या करना है। मेरे ज्ञान के लिए, PHP 5.3.5 के आस-पास कोई रास्ता नहीं है। instanceof का उपयोग करना दोनों आधारों को हल करना चाहिए।

मूल वर्गों को आयात करना, जैसे अपवाद भी काम करना चाहिए, उदा।

namespace My\Own\Namespace; 
use \Exception as Exception; 
throw new Exception('something broke'); 

chapter on Namespace in the PHP Manual अधिक जानकारी के लिए देखें।

0

मुझे नहीं लगता कि is_a() सम्मान सापेक्ष नामस्थान (जैसे वर्तमान नामस्थान या use कमांड के साथ आयातित नामस्थान) बनाने का कोई तरीका है। ऐसा इसलिए है क्योंकि यह एक स्ट्रिंग तर्क लेता है और एक अलग संदर्भ में निष्पादित करता है। आपको इसके बजाय instanceof वाक्यविन्यास पर स्विच करने की आवश्यकता होगी। तो नहीं, मुझे नहीं लगता कि यह आपको पुस्तकालयों के बीच टकराव से बचने में मदद करेगा जो दोनों वैश्विक नामस्थान के खिलाफ लिखे गए हैं, आपको अभी भी इस तरह के उदाहरण ढूंढना होगा और उन्हें सीधे संबोधित करना होगा।

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