標籤:style blog io ar color 使用 sp on 檔案
今兒寫代碼是發現一個問題:
PHP 類 成員變數不能接受方法得傳回值
做以下測試:
bin_2.php
<?php/** * Created by PhpStorm. * User: Administrator * Date: 14-12-4 * Time: 下午9:45 */header("Content-type:text/html;charset=utf-8");require_once(‘bin_1.php‘);require_once(‘bin_3.php‘);class bin_2{ //$bin_3 = new bin_3(); //$bin_3->getStr_1(); public $testString ; //public $testString_1 = getStr(); //public $testString_2 = test(); //public static $testString_3 = self::test_1(); public function test(){ echo getStr(); } public static function test_1(){ return "abc"; }} $class = new bin_2(); $class->test();
bin_1.php
<?php function getStr(){ return "測試成員變數是否能 接受方法傳回值"; } ?>
bin_3.php
<?php/** * Created by PhpStorm. * User: Administrator * Date: 14-12-4 * Time: 下午10:22 */class bin_3{ function getStr_1(){ return "abc"; }}
已上測試出 類成員變數無法賦值為方法得傳回值
但是有點感覺自相矛盾:
首先;普通成員變數,無法被賦值,很正常,因為,這些變數屬於對象。
//$bin_3 = new bin_3();
//$bin_3->getStr_1();
此處表明類內部,成員方法外部無法執行個體化對象。但是當一個類執行個體化得時候,在編譯過程中,為何不能執行個體化另外一個類來對自己來實現一些業務需求呢?也許你會說直接繼承該類,但是如果依賴很多個類呢,PHP也不支援多繼承。
//public $testString_1 = getStr();
成員變數無法使用其他檔案得某個方法,這個也說不過去,因為bin_1.php不是一個類,匯入進來後,改檔案就擁有了bin_1得全部。為何不能使用自己內部的方法為自己變數賦值?就像和構造方法一樣,一開始為自己成員變數賦值。不過這樣還是有缺點,感覺構造方法這個東西的重要性就遠遠被削弱,而且造成了代碼得難維護性,因為有可能你用了N個這樣的方法,但是如果用構造方法,就等於是封裝了全部,何樂而不為。
//public $testString_2 = test();
不支援,調用自身某個方法,這也是正確得思想,因為在執行個體化的過程,還是哥封閉得過程,只是對象本身,而沒被指定任務,譬如調用某某方法等等,所以既然是封閉的,為何不直接等於,而要寫成一個方法呢?
//public static $testString_3 = self::test_1();
靜態變數,無法被自身靜態方法賦值,想必這和上面也是一樣的意思吧。
但是在日常代碼編寫中,也許某個成員變數,要依賴於別的類業務支援,那麼我們就乖乖得放在構造方法中。增加代碼得可維護性。較高得封裝度。
PHP 類成員變數規範得一些理解。