2012-08-16 7 views
13

अपने स्थानीय विकास मशीन पर (php 5.3.14) मैं इस तरह एक वर्ग का उपयोग कर सकते "नाम पहले से ही प्रयोग में है" असामान्य गंभीर त्रुटि:Php साथ

<?php 

namespace Shop\Repository; 

use Shop\Entity\Day; 
use Doctrine\ORM\EntityRepository; 

class Product extends EntityRepository 
{ 
    // Code 
} 

वर्ग/मेरी/src में संग्रहित है /Shop/Repository/Product.php (पीएसआर -0 अनुरूप)। मेरे पास भीShop\Repository\Day /my/src/Shop/Repository/Day.php पर स्थित है।

लेकिन, मेरा मचान सर्वर (php 5.3.10) मैं निम्नलिखित त्रुटि मिलती है पर:

PHP Fatal error: Cannot use Shop\Entity\Day as Day because the name is already in use in /my/src/Shop/Repository/Product.php on line 5

मैं संदेश को समझ सकता हूँ, अगर मैं अपने दुकान \ इकाई \ डे DayEntity करने के लिए आयात उपनाम, कोड काम करता है। लेकिन मैं घातक त्रुटि के कारण को समझ नहीं पा रहा हूं: यह PHP 5.3.14 (या कम से कम, मेरी कॉन्फ़िगरेशन के साथ) पर क्यों काम करता है और 5.3.10 (या कम से कम, सर्वर की कॉन्फ़िगरेशन के साथ) नहीं?

मुझे लगता है कि समस्या यह है क्योंकि नामस्थान Shop\Repository में पहले से ही Day लोड हो चुका है। लेकिन इसने मेरे सेटअप में त्रुटियों का कभी भी नेतृत्व नहीं किया है! क्या चल रहा है?

+0

'एंटीटीडे के रूप में दुकान \ इकाई \ दिन का उपयोग करें;', या बस इसे पूरी तरह से योग्य नाम के साथ देखें और 'उपयोग' घोषणा पूरी तरह से छुटकारा पाएं। शायद [इस] (http://www.php.net/manual/en/language.namespaces.importing.php) को फिर से पढ़ें। – DaveRandom

+0

यह स्पष्ट है कि यदि आप किसी नामस्थान में दिन नामक कक्षा को आयात करते हैं तो पहले से ही एक कक्षा नामक कक्षा को आयात किया जाएगा। यह आपके स्थानीय सेट-अप पर क्यों काम करता है; मैं 5.4.10 और 5.3.14 के बीच नामस्थान से संबंधित चेंजलॉग में कोई भी बगफिक्स नहीं देख सकता। क्या यह संभव है कि आपके रिपोजिटरी \ डे क्लास का उपयोग उस बिंदु पर नहीं किया गया है जब आप एंटीटी \ डे लोड करते हैं? – Leigh

+0

@ लेइघ मैं गिट से सटीक उसी क्लोन के साथ सटीक उसी पृष्ठ का अनुरोध कर रहा हूं। इसलिए यह एक (php) कॉन्फ़िगरेशन समस्या होनी चाहिए। –

उत्तर

7

यहाँ कुछ स्पष्टीकरण मैं इस स्थिति के बारे में पकड़ा कर रहे हैं:

require_once 'ns_class2.php'; 
// 
namespace ns; // Declaration of the namespace named "ns" 
class class2 {} // Declaration of the class "ns/class2" 
// In the namespace "ns", "class2" is an alias of "ns\class2" 
// 


require_once 'ns_ns1_ns2_class2.php'; 
// 
namespace ns\ns1\ns2; // Declaration of the namespace named "ns\ns1\ns2" 
class class2 {} // Declaration of the class "ns\ns1\ns2\class2" 
// In the namespace "ns\ns1\ns2", "class2" is an alias of "ns\ns1\ns2\class2" 
// 

require_once 'ns_ns1_ns2_class1.php'; 
// 
namespace ns\ns1\ns2; // Declaration of the namespace named "ns\ns1\ns2" 
// In the namespace "ns\ns1\ns2", "class2" is an alias of "ns\ns1\ns2\class2" 
use ns\class2; // Creation of the alias "class2" which point to "ns\class2" but class2 is already an alias of ns\ns1\ns2\class2 => ERROR 

तो तुम (get_included_files साथ प्रयास करना चाहिए) आपके सर्वर और स्टेशन विभिन्न रहे हैं क्या पर देखने के लिए क्योंकि उन्हें लोड करने के लिए महत्वपूर्ण है

उन स्पष्टीकरण this nice post जिसके द्वारा dmitry

आशा टिप्पणी की गयी है से जुड़े हुए हैं इस मदद कर सकता है