優雅地建立未定義類PHP對象

在PHP中,若是沒有事先準備好類,須要建立一個未定義類的對象,咱們能夠採用下面三種方式:php

  • new stdClass()
  • new class{}
  • (object)[]

首先是stdClass,這個類是一個空的類模板,是PHP的內部保留關鍵字及類名。能夠把它相像成是Java中的Object基類,在Java中,全部類都自然繼承自Object基類。而PHP中的這個stdClass則是徹底的一個空的類模板。你本身新建立的類並非它的子類。可是用這個類模板能夠建立一個本身未定義類的對象。固然,這個對象內部沒有任何東西。前端

$a = new stdClass();
var_dump($a);

new class{}呢?作過一段時間開發,接觸過前端js和其餘動態語言的應該能猜到,這個是匿名類。通常在參數對象中很常見。它建立出來的對象是能夠帶屬性方法的。git

$b = new class{
    public $p = 1;
};
var_dump($b);

最後咱們來看到的是使用數組強轉成對象的形式來生成一個對象。github

$c = (object)[
    'p' => 1
];
var_dump($c);

很明顯,數組強轉的形式生成的對象和第一種對象是一個類型的,並且它能夠帶屬性也能夠不帶。可是,它不能帶方法。數據庫

數組強轉方式生成的對象很是的直觀好理解。若是隻是屬性對象的封裝,使用這種方式會更加地優雅舒服。複雜的對象生成能夠使用匿名類的方式進行生成。而一些僅須要佔位的對象,能夠使用stdClass的方法,固然用空數組的方式也很方便。數組

須要注意的是,數組強轉須要遵照類型轉換的規則。好比數字下標的問題。微信

在平常開發中,咱們對於一些接口或者數據庫ORM框架的使用中會常常用這些功能。好比一些ORM框架的插入、修改須要傳入的是隻包含屬性的對象。這時候就能夠使用上述的方法靈活地生成對象而不用完整的定義類模板了。框架

測試代碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/201910/source/%E4%BC%98%E9%9B%85%E5%9C%B0%E5%88%9B%E5%BB%BA%E6%9C%AA%E5%AE%9A%E4%B9%89PHP%E5%AF%B9%E8%B1%A1.php學習

參考資料:
https://www.php.net/manual/zh/language.types.object.php#117149

關注公衆號:【硬核項目經理】獲取最新文章測試

添加微信/QQ好友:【xiaoyuezigonggong/149844827】免費得PHP、項目管理學習資料

知乎、公衆號、抖音、頭條搜索【硬核項目經理】

B站ID:482780532

相關文章
相關標籤/搜索