java - PHP5的類執行個體變數的聲明問題

來源:互聯網
上載者:User
private $db = new Db();

如上,在php5的類中,如果直接聲明一個執行個體變數,就會報類聲明錯誤

改成下面這樣就可以

private $db = null;    public function __construct(){    $this->db = new Db();    }

非得先聲明一個空值,再用方法賦值,搞的常常寫出來查半天發現沒bug,才明白原來是文法要求。

不明白是基於什麼考慮,我理解,可能是php5學習面象對象學的還不完善,所以有很多問題,大夥聊聊。

補問:PHP7還是這樣嗎?

鳥哥,求擼 @Laruence
.

回複內容:

private $db = new Db();

如上,在php5的類中,如果直接聲明一個執行個體變數,就會報類聲明錯誤

改成下面這樣就可以

private $db = null;    public function __construct(){    $this->db = new Db();    }

非得先聲明一個空值,再用方法賦值,搞的常常寫出來查半天發現沒bug,才明白原來是文法要求。

不明白是基於什麼考慮,我理解,可能是php5學習面象對象學的還不完善,所以有很多問題,大夥聊聊。

補問:PHP7還是這樣嗎?

鳥哥,求擼 @Laruence
.

因為如果允許
private $db = new Db();
這樣的文法,那麼,檔案被載入後,Db類就被初始化了。
請注意,是A類被載入記憶體,Db類就被執行個體化了。
而如果Db類也用了同樣的文法,那麼可能你include一個檔案,就會很慢,因為include的同時,就在進行一系列的類執行個體化行為。

而禁用這種特性,只允許在類構造方法中執行個體化其他類,就能很好的控制類執行個體化的流程了。載入類時,永遠不會產生附帶的類執行個體化。

無論對於系統的最佳化,還是對於程式已耗用時間的掌控,可預測、可控的,才是好的、可持續的。

PHP暫時未提供對對象屬性直接賦值對象的支援,對象的賦值暫時只能通過建構函式來實現。
當然,你不能說php要向java去學習物件導向,也沒有誰規定java才是物件導向的標杆,如果php真的樣樣都和java一樣了,那它幹嘛還叫php呢。

補答:PHP7依然是這樣。

class的直接賦值只能是 標量 (數值,字串,數組,布爾)

謝謝邀請。樓上回答就很到位

都是大神 在函數外面直接執行個體化類沒做過,但是你的第二種寫法兩個db不是同一個變數吧

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.