2012-12-21 16 views
7

बस के आसपास खेल रहे हैं और मैं इस पाया।यह कोड एक अनिर्धारित संपत्ति PHP नोटिस क्यों नहीं फेंक रहा है?

क्यों $this->newAxis() के संदर्भ द्वारा कॉल करता है, जबकि var_dump() करता नहीं, एक अपरिभाषित संपत्ति नोटिस (xAxis संपत्ति) फेंक?

public function newXAxis() 
{ 
    // var_dump(isset($this->xAxis)); // false 
    // var_dump($this->xAxis); // Throws the notice 
    return $this->newAxis($this->xAxis); // Should throw the notice?! 
} 

protected function newAxis(&$current) 
{ 
    // ... 
} 

यह संदर्भ द्वारा पारित होने के साथ कुछ करने के लिए है, इस प्रकार सीधे प्रॉपर्टी एक्सेस नहीं?

उत्तर

7

हाँ, यह इसलिए होता है क्योंकि आप इसे संदर्भ से गुजरती हैं। जब आप मूल्य से गुजरते हैं, तो वास्तव में चर के मान को पढ़ने का प्रयास किया जाता है - इसलिए एक नोटिस दिखाई देता है। जब आप संदर्भ से गुजरते हैं, तो मूल्य को पढ़ने की आवश्यकता नहीं होती है।

जब आप कि, चर/संपत्ति अगर यह अभी तक मौजूद नहीं बनाई गई है है।

manual से:

आप, आवंटित गुजरती हैं, या संदर्भ द्वारा एक अपरिभाषित चर वापस करते हैं, यह बनाया जाएगा।

<?php 
function foo(&$var) { } 
foo($a); // $a is "created" and assigned to null 
+0

मुझे प्रोग्रामिंग पसंद है क्योंकि आप हमेशा कुछ नया सीखते हैं। मैनुअल के संदर्भ के लिए धन्यवाद। – gremo

-2

मैं एक अंग यहाँ पर जा रहा हूँ ...

के बाद से आप एक वस्तु के रूप में यह तक पहुँच रहे हैं (एक वर्ग से) यह आपको एक नोटिस है, जबकि जब आप कुछ यह पहुँच की तरह var_dump नहीं देंगे यह एक सरणी की तरह (और के बाद से यह खाली है, यह एक नोटिस फेंकता)

5
newAxis(&$current) 

संदर्भ द्वारा पास होना जरूरी है। इसका मतलब है कि आप एक चर पारित कर रहे हैं।

डिफ़ॉल्ट रूप से PHP में सभी चर अपरिभाषित है।

आप उन्हें बस का उपयोग कर, उदा परिभाषित

$a = 1; 

आप देख सकते हैं, पीएचपी यहां शिकायत नहीं है कि $a, अपरिभाषित है ना?

ठीक है;), यहाँ देखें:

$a = $b; 

पीएचपी अब शिकायत है कि $b अनिर्धारित रहता है।

की तरह साथ $a (आप चर को परिभाषित)

और $b (चर परिभाषित नहीं है) यह संदर्भ द्वारा या मूल्य द्वारा पारित होने के साथ है:

$this->newAxis($a); 

जब संदर्भ द्वारा पारित चर $a परिभाषित किया गया है। इसमें इसका डिफ़ॉल्ट मान NULL है। और अब $b उदाहरण:

var_dump($b); 

var_dump यह मूल्य द्वारा मानकों है लेता है। इसलिए PHP शिकायत करता है कि $b परिभाषित नहीं किया गया है।

और यह सब कुछ है। मुझे उम्मीद है कि यह काफी स्पष्ट था।

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