2014-10-03 5 views
5

मैं एक वस्तु है और जब मैं उपयोगकर्ता var_dump मैं मिल निम्नलिखित:पीएचपी - निकालने सरणी मूल्यों (वर्ग कोष्ठक बनाम तीर अंकन)

var_dump($object); 

array (size=7) 
    'id' => int 1969 
    'alt' => string '' (length=0) 
    'title' => string 'File Name' (length=9) 
    'url' => string 'http://location/file.pdf' (length=24) 

जब मैं echo$object[url] यह रिटर्न string 'http://location/file.pdf' (length=24), लेकिन जब मैं echo$object->url मैं null प्राप्त करें। (यह कभी-कभी किसी सरणी से मूल्य निकालने के लिए काम करता है, मुझे यकीन नहीं है कि कौन से मामले या किस प्रकार के सरणी)

समस्या यह है कि मैं एक होस्टिंग प्रदाता का उपयोग करता हूं जिसमें एक गिट सुविधा है, और जब मैं अपना धक्का देता हूं परिवर्तन, यह PHP कोड की जांच करता है और एक वाक्यविन्यास त्रुटि (अप्रत्याशित '[') का सामना करता है जो पुश को रोकता है।

मेरे स्थानीय सर्वर पीएचपी 5.4.16 का उपयोग करता है और मेजबान 5.3.2

का उपयोग करता है एक व्यापक नोट पर, किसी एक संसाधन है कि सरणियों से मान निकालने के इन दो विधियों के बीच अंतर बताते हैं करने के लिए मुझसे बात कर सकते हैं? बहुत सराहना की!

+3

'$ var-> foo' एक ऑब्जेक्ट संदर्भ है। '$ var [foo]' एक सरणी संदर्भ है। जबकि इस तरह के ठोड़ी को जावास्क्रिप्ट जैसे कुछ भाषाओं में एक दूसरे के रूप में इस्तेमाल किया जा सकता है, PHP में एक सरणी और एक वस्तु दो पूरी तरह से अलग चीजें हैं। –

उत्तर

7

आपके पास कोई ऑब्जेक्ट नहीं है, आपके पास एक सहयोगी सरणी है। अपने var_dump() उत्पादन में बहुत पहले शब्द नोट है:

array 

इस प्रकार $object->url कोई अर्थ नहीं है और वास्तव में आप एक गैर वस्तु की संपत्ति का उपयोग करने की कोशिश कर रहा है के बारे में त्रुटि देना चाहिए।

मैं किसी भी PHP से संबंधित वाक्यविन्यास जांच प्रक्रिया की कल्पना नहीं कर सका जो $foo['bar'] जैसे किसी त्रुटि पर फेंक देगा। चाहे वह एक ऑब्जेक्ट या सरणी है, आमतौर पर एक साधारण वाक्यविन्यास जांच द्वारा निर्धारित नहीं किया जा सकता है। आपके पास कहीं और अन्य टाइपो हो सकते हैं जो इस कारण हैं।

+2

बुद्धिमान, '->' ऑब्जेक्ट ** तक पहुंचने के लिए है जो किसी ऑब्जेक्ट के साथ है जो 'ArrayAccess' लागू करता है। – prodigitalson

+0

हां मैं भी त्रुटि से हैरान हूं, लेकिन यह तब होता है जब ब्रैकेट नोटेशन मौजूद होता है। – psorensen

+0

@PeteSorensen शायद आपके होस्टिंग प्रदाता के लिए एक प्रश्न हो सकता है (या देखें कि क्या आप उन्हें सिंटैक्स चेकिंग की बारी कर सकते हैं, क्योंकि यह पुश प्रक्रिया के हिस्से के रूप में इसे चलाने के लिए अजीब लगेगा। –

4

आप सरणियों इस तरह से उपयोग नहीं कर सकते: -> है कि केवल की तरह वस्तुओं पर लागू निम्नलिखित:

$valA = $x->a; 
:

$x = (object) array('a'=>'A', 'b'=>'B', 'C'); gives you: 

stdClass Object 
(
    [a] => A 
    [b] => B 
    [0] => C 
) 

ये मान आपको यह -> साथ जिस तरह से ऐसा करने की तरह है पर पहुंचने के लिए

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