我的問題是爲什麼test()方法可以訪問測試變量?
與其他語言不同,PHP允許您爲變量賦值而不必首先聲明它們。口譯員會爲你初始化它們。這是不良的做法,因爲它使代碼更難閱讀和調試,因爲如果你試圖它可能會導致錯誤讀取這是從來沒有聲明的變量:
<?php
$nonexistentArray['key'] = 7; //Bad practice, but PHP won't complain
$a = $fakeArray['key']; //Undefined variable error
即使在第二種情況下,PHP將繼續執行腳本的其餘部分,但它會抱怨。
測試是一個全局變量嗎?
不。它生活在本地範圍內。
<?php
function myFunc(){
//$arr was never declared, but PHP won't complain
$arr['key'][]=7;
}
myFunc();
//Undefined var error. The $arr that was initialized in myFunc is not global
print_r($arr);
如果您嘗試使用您從未聲明過的變量,一個好的IDE會發出抱怨。在你的情況下,當你在構造函數中做:
$this->test = 'helloworkd';
PHP會爲你初始化這個類屬性。現在剩下的代碼可以使用它,包括test()
方法。如果它看起來像一個全局變量,那不是。這是一個類屬性。如果你試圖從課堂以外只訪問它test
,你將無法做到。您必須使用$test->test
或$this->test
中的訪問器運算符->
。
不是全局的,因爲你使用了'$ this->',所以它已經將它創建爲類的一個樣本。這是真的,你不必在PHP中正式聲明一個屬性。 **但是,宣佈你知道你將要使用的屬性是一個好主意**,因爲它使得一個類對其他人更具可讀性,並且當你想修改類時,你需要6個月的時間。 – RiggsFolly
更好如果你聲明它,因爲它有助於IDE自動完成。 – vaso123
您還可以搜索PHP魔術方法 – dios231