在PHP中,如果沒有事先準備好類,需要創建一個未定義類的物件,我們可以采用下面三種方式:
- new stdClass()
- new class{}
- (object)[]
首先是stdClass,這個類是一個空的類模板,是PHP的內部保留關鍵字及類名,可以把它相像成是Java中的Object基類,在Java中,所有類都天然繼承自Object基類,而PHP中的這個stdClass則是完全的一個空的類模板,你自己新創建的類并不是它的子類,但是用這個類模板可以創建一個自己未定義類的物件,當然,這個物件內部沒有任何東西,
$a = new stdClass();
var_dump($a);
new class{}呢?做過一段時間開發,接觸過前端js和其他動態語言的應該能猜到,這個是匿名類,一般在引數物件中很常見,它創建出來的物件是可以帶屬性方法的,
$b = new class{
public $p = 1;
};
var_dump($b);
最后我們來看到的是使用陣列強轉成物件的形式來生成一個物件,
$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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/248864.html
標籤:PHP
下一篇:Laravel 佇列使用
