小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

優(yōu)雅地創(chuàng)建未定義類PHP對(duì)象

 硬核項(xiàng)目經(jīng)理 2021-05-31

優(yōu)雅地創(chuàng)建未定義類PHP對(duì)象

在PHP中,如果沒有事先準(zhǔn)備好類,需要?jiǎng)?chuàng)建一個(gè)未定義類的對(duì)象,我們可以采用下面三種方式:

  • new stdClass()

  • new class{}

  • (object)[]

首先是stdClass,這個(gè)類是一個(gè)空的類模板,是PHP的內(nèi)部保留關(guān)鍵字及類名??梢园阉嘞癯墒荍ava中的Object基類,在Java中,所有類都天然繼承自O(shè)bject基類。而PHP中的這個(gè)stdClass則是完全的一個(gè)空的類模板。你自己新創(chuàng)建的類并不是它的子類。但是用這個(gè)類模板可以創(chuàng)建一個(gè)自己未定義類的對(duì)象。當(dāng)然,這個(gè)對(duì)象內(nèi)部沒有任何東西。

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

new class{}呢?做過一段時(shí)間開發(fā),接觸過前端js和其他動(dòng)態(tài)語言的應(yīng)該能猜到,這個(gè)是匿名類。一般在參數(shù)對(duì)象中很常見。它創(chuàng)建出來的對(duì)象是可以帶屬性方法的。

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

最后我們來看到的是使用數(shù)組強(qiáng)轉(zhuǎn)成對(duì)象的形式來生成一個(gè)對(duì)象。

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

很明顯,數(shù)組強(qiáng)轉(zhuǎn)的形式生成的對(duì)象和第一種對(duì)象是一個(gè)類型的,而且它可以帶屬性也可以不帶。但是,它不能帶方法。

數(shù)組強(qiáng)轉(zhuǎn)方式生成的對(duì)象非常的直觀好理解。如果只是屬性對(duì)象的封裝,使用這種方式會(huì)更加地優(yōu)雅舒服。復(fù)雜的對(duì)象生成可以使用匿名類的方式進(jìn)行生成。而一些僅需要占位的對(duì)象,可以使用stdClass的方法,當(dāng)然用空數(shù)組的方式也很方便。

需要注意的是,數(shù)組強(qiáng)轉(zhuǎn)需要遵守類型轉(zhuǎn)換的規(guī)則。比如數(shù)字下標(biāo)的問題。

在日常開發(fā)中,我們對(duì)于一些接口或者數(shù)據(jù)庫ORM框架的使用中會(huì)經(jīng)常用這些功能。比如一些ORM框架的插入、修改需要傳入的是只包含屬性的對(duì)象。這時(shí)候就可以使用上述的方法靈活地生成對(duì)象而不用完整的定義類模板了。

測(cè)試代碼:
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./manual/zh/language.types.object.php#117149

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多