2014-04-20 80 views
0

當我遇到問題時,我在PHP中進行了一個用於驗證聯繫表單的類。我終於跟蹤它到類中的數組,並寫了一個測試腳本來嘗試解決問題:如何在對象中使用數組?

<?php 

class Object { 
    public $testArray = array(5); 

    function __construct() { 
     $testArray[] = 7; 
    } 

    function addNumber() { 
     $testArray[] = mt_rand(10,20); 
    } 

    function returnArray() { 
     return var_dump($testArray); 
    } 
} 

$object = new Object; 
$object->addNumber(); 
echo($object->returnArray()); 
var_dump($object->testArray); 

此輸出NULL array(1) { [0]=> int(5) }

我很困惑,爲什麼這不起作用。最終我希望該數組是私有的,但是我找不到類似於C#中的getset的方法。有任何想法嗎?

+1

您需要使用'$ this'關鍵字來訪問該類的屬性和方法。 –

+0

在其他一些語言中,你可以直接使用變量名,在PHP中你需要通過'$ this'訪問它們。這是獨立於私人的,受保護的或公共的。這已經被問過,但可能很難搜索。 – hakre

回答

2

這給一展身手:

class Object { 
    public $testArray = array(5); 

    function __construct() { 
     $this->testArray[] = 7; 
    } 

    function addNumber() { 
     $this->testArray[] = mt_rand(10,20); 
    } 

    function returnArray() { 
     return var_dump($this->testArray); 
    } 
} 

您必須引用使用類變量$ this - 否則它會嘗試設置一個局部變量自己所處的功能

你。可以使用PHP的magic __set()和__get()方法來實現與您提到的C#類似的功能:PHP Overloading

1
$testArray[] = mt_rand(10,20); 

應該是:

$this->testArray[] = mt_rand(10,20); 

$testArray只是另一個局部變量(局部的功能,無類)。如果它沒有價值,它是null。這與您所看到的輸出一致。 $object->testArray從不修改。

1

您必須使用$ this訪問類變量。所以$ testArray應該是$ this-> testArray。

相關問題