2016-06-22 58 views
-1

我不是新手編程,但我發現自己質疑執行後如何重新啓動一個函數。我被教導每次方法開始時,在方法運行重置時設置屬性或變量。爲什麼一個對象在執行後重置?編輯

如果執行下面的PHP函數,則對象集的屬性將消失。 它是如何工作的?

class test{ 
    public $prop1; 

    function test1($prop){ 

     $prop1 = $prop; 

     $this->prop1 = $prop1; 
    } 
} 
$test = new test(); 
$test->test1("string"); 
echo $test->prop1; 

正如您可以看到上面的示例代碼,它將變量「$ prop」存儲在屬性「prop1」處。

但執行後,屬性消失,變量$ prop1也消失。

你能解釋一下這個機制嗎?

或者我想念一些非常基礎的編程?

在此先感謝。

+1

究竟你 「執行後」 是什麼意思?向我們展示實例化此類並調用此方法的代碼,然後檢查此值以發現它已消失。 – Vrac

+0

我剛編輯。謝謝 –

+0

你的財產是私人的,所以你不能在課堂以外的地方訪問它,除非你公開或者提供公開的方法來返回私人價值。 – Vrac

回答

1

PHP使用garbage collector。當一個變量變得不可達時,它就會被銷燬。

關於您的代碼 - 在方法test1()完成後$prop參數的值不會被銷燬,因爲您將其存儲在$prop1屬性中。在退出test1()後(即使不是直接),$test->prop1仍可到達。

class test 
{ 
    private $prop1; 

    function test1($prop) 
    { 
     $prop1 = $prop; 

     $this->prop1 = $prop1; 
    } 
} 

$test = new test(); 

$test->test1('hello'); 

var_dump($test); 

輸出:

object(test)#1 (1) { 
    ["prop1":"test":private]=> 
    string(5) "hello" 
} 
+0

哦!我以前不知道垃圾收集器。非常感謝!!! –

0

該屬性需要公開,或由公共getter返回,以便在課程外部訪問它。通常情況下,代碼將失敗與消息:

Fatal error: Cannot access private property test::$prop1 in xxx.php on line x

但隨着錯誤報告關閉(或者被引導到沒有被檢查日誌文件;))echo $test->prop1;不執行,有沒有從程序輸出,給人的印象是變量是空的。

error_reporting(E_ALL);將使程序失敗並顯示相應的消息。

相關問題