PHP 類成員變數規範得一些理解。

來源:互聯網
上載者:User

標籤: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 類成員變數規範得一些理解。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.