2016-01-17 11 views
7

में कक्षा के सरणी स्थिरांक में तत्वों के अस्तित्व की जांच करें मैं कैसे जांच सकता हूं कि ए \ बी :: एक्स ['वाई'] ['Z'] जैसे निरंतर तत्व सेट है?PHP 5.6

<?php 

namespace A; 

class B 
{ 
    const X = [ 
     'Y' => [ 
      'Z' => 'value' 
     ] 
    ]; 
} 

var_dump(defined('\A\B::X') && isset(\A\B::X['Y']['Z'])); 

Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in [...] on line 13

+0

[isset] (http://php.net/manual/it/function.isset.php) – Federkun

+0

@ रिज़ियर 123 परिभाषित (ए \ बी :: एक्स) सत्य लौटाता है लेकिन परिभाषित (ए \ बी :: एक्स [' वाई '] [' जेड ']) झूठी वापसी करता है :( – user5483434

+0

@ फेडेरिको इसेट() एक घातक त्रुटि को ट्रिगर करता है। – user5483434

उत्तर

9

isset केवल चर के साथ काम करता है।

var_dump(
    defined('\A\B::X') && 
    array_key_exists('Y', \A\B::X) && 
    array_key_exists('Z', \A\B::X['Y']) 
); 
+2

यदि कोई सोच रहा है: '' '' जारीकर्ता'' 'एरे के साथ काम करता है जो PHP 7 में स्थिरांक हैं। ऐसा लगता है कि कहीं भी –

+0

दस्तावेज नहीं किया गया है, बेन अतिथि, धन्यवाद। अजीब लगता है कि जारीकर्ता निरंतर सरणी पर काम नहीं करता था जो स्पष्ट रूप से कुछ के लिए सेट था। अंततः PHP टीम ने इस पर काम किया। :) –

5

isset के बाद से चर (मेरा बुरा) और नहीं मनमाने ढंग से अभिव्यक्ति पर पर काम करता है, तो आप array_key_exists बजाय उपयोग कर सकते हैं।

namespace A; 

class B 
{ 
    const X = [ 
     'Y' => [ 
      'Z' => 'value' 
     ] 
    ]; 
} 

var_dump(array_key_exists('Y', \A\B::X) && array_key_exists('Z', \A\B::X['Y'])); 
+0

में स्थिर अवतार वाले एरे के साथ '' 'जारीकर्ता'' 'कार्यों को जानना उपयोगी है। :-) –

0

तुम भी बस का उपयोग कर सकते हैं:: आप यह देखना होगा कि A\B::X['Y']['Z'] मौजूद है निम्नलिखित कोड का उपयोग कर सकते

var_dump(@\A\B::X['Y']['Z'] !== NULL); 

केवल चेतावनी आप इसका इस्तेमाल नहीं कर सकते है अपने const शून्य करने के लिए परिभाषित किया जा सकता ।
ऐसे मामले में, आप const'' (खाली स्ट्रिंग) मान देने के लिए चुन सकते हैं, जो कि PHP में काफी समतुल्य है।

+0

धन्यवाद, लेकिन एसटीएफयू ऑपरेटर हमारी कंपनी के कोडिंग मानकों के अनुसार एक विकल्प नहीं है। निजी तौर पर, मुझे इसका उपयोग करना पसंद नहीं है। – user5483434

+0

@ user5483434 मुझे पता है कि इस बारे में थोड़े धर्म हैं। मैं बिना किसी सावधानी के इसका उपयोग न करने की सिफारिश करने के लिए सहमत हूं, लेकिन मैं अपने कुल (और अंधे, आईएमओ) प्रतिबंध से दृढ़ता से असहमत हूं। क्षमा करें अगर यह मदद नहीं की है। – cFreed

+1

कृपया क्षमा न करें, आपका समाधान मेरे दिमाग में नहीं आया और मैं आपको यह सिखाए जाने के लिए वास्तव में धन्यवाद देता हूं। लेकिन हमारे कोडिंग नियमों के मुताबिक, हमें तब तक उस ऑपरेटर का उपयोग नहीं करना चाहिए जब तक कि हमारे ज़रूरतों के अनुरूप अन्य समाधान न हों, लेकिन हमें सभी मामलों पर इसका इस्तेमाल करने पर प्रतिबंध नहीं है, उदाहरण के लिए, पीडीओ कन्स्ट्रक्टर में एक बग है जो एकमात्र तरीका है इसे ठीक करें, इस ऑपरेटर का उपयोग कर रहा है, और हमें ऐसे मामलों में अनुमति है। असल में, जबकि हम पूरी तरह से प्रतिबंधित नहीं हैं, लेकिन हमने PHP ऑपरेटर के हमारे कई मेगाबाइट्स में उस बग को ठीक करने के लिए @ ऑपरेटर का उपयोग किया है। – user5483434

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