日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php 获取对象所有成员变量,PHP成员变量获取对比

發(fā)布時間:2023/12/4 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 获取对象所有成员变量,PHP成员变量获取对比 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

有如下4個代碼示例,你認(rèn)為他們創(chuàng)建對象,并獲得成員變量的速度排序是怎樣的?

1:將成員變量設(shè)置為public,通過賦值操作給成員變量賦值,直接獲取變量

class Foo { public $id; } ? $data = new Foo; $data->id = 10; echo $data->id;

2:將成員變量設(shè)置為public,通過構(gòu)造函數(shù)設(shè)置成員變量的值,直接獲取變量

class Foo2 { public $id; public function __construct($id) { $this->id = $id; } } ? $data = new Foo2(10); echo $data->id;

3:將成員變量設(shè)置為protected,通過構(gòu)造函數(shù)設(shè)置成員變量的值,通過成員方法獲取變量

class Foo3 { protected $id; public function __construct($id) { $this->id = $id; } ? public function getId() { return $this->id; } } $data = new Foo3(10); echo $data->getId();

4:將成員變量設(shè)置為protected,通過構(gòu)造函數(shù)設(shè)置成員變量的值,通過魔術(shù)方法獲取變量

class Foo4 { protected $id; public function __construct($id) { $this->id = $id; } ? public function __get($key) { return $this->id; } } $data = new Foo4(10); echo $data->id;

按執(zhí)行速度快慢排序: 1243

咱們先看其opcode:

1:

1 ZEND_FETCH_CLASS 4 :4 'Foo' 2 NEW $5 :4 3 DO_FCALL_BY_NAME 0 4 ASSIGN !0, $5 5 ZEND_ASSIGN_OBJ !0, 'id' 6 ZEND_OP_DATA 10 7 FETCH_OBJ_R$9 !0, 'id' 8 ECHO $9

2:

1 ZEND_FETCH_CLASS 4 :10 'Foo2' 2 NEW $11 :10 3 SEND_VAL 10 4 DO_FCALL_BY_NAME 1 5 ASSIGN !1, $11 6 FETCH_OBJ_R$14 !1, 'id' 7 ECHO $14

3:

1 ZEND_FETCH_CLASS 4 :15 'Foo3' 2 NEW $16 :15 3 SEND_VAL 10 4 DO_FCALL_BY_NAME 1 5 ASSIGN !2, $16 6 ZEND_INIT_METHOD_CALL !2, 'getId' 7 DO_FCALL_BY_NAME 0 $20 8 ECHO $20

4:

1 ZEND_FETCH_CLASS 4 :21 'Foo4' 2 NEW $22 :21 3 END_VAL 10 4 DO_FCALL_BY_NAME 1 5 ASSIGN !3, $22 6 FETCH_OBJ_R $25 !3, 'id' 7 ECHO $25

根據(jù)上面的opcode,參照其在zend_vm_execute.h文件對應(yīng)的opcode實(shí)現(xiàn),我們可以發(fā)現(xiàn)什么?

一、PHP內(nèi)核創(chuàng)建對象的過程分為三步:

ZEND_FETCH_CLASS 根據(jù)類名獲取存儲類的變量,其實(shí)現(xiàn)為一個hashtalbe EG(class_table) 的查找操作

NEW 初始化對象,將EX(call)->fbc指向構(gòu)造函數(shù)指針。

調(diào)用構(gòu)造函數(shù),其調(diào)用和其它的函數(shù)調(diào)用是一樣,都是調(diào)用zend_do_fcall_common_helper_SPEC

二、魔術(shù)方法的調(diào)用是通過條件觸發(fā)的,并不是直接調(diào)用,如我們示例中的成員變量id的獲取(zend_std_read_property),其步驟為:

獲取對象的屬性,如果存在,轉(zhuǎn)第二步;如果沒有相關(guān)屬性,轉(zhuǎn)第三步

從對象的properties查找是否存在與名稱對應(yīng)的屬性存在,如果存在返回結(jié)果,如果不存在,轉(zhuǎn)第三步

如果存在__get魔術(shù)方法,則調(diào)用此方法獲取變量,如果不存在,報錯

回到排序的問題:

一、第一個和第二個的區(qū)別是什么?

第二個的opcode比第一個要少,反而比第一個要慢一些,因?yàn)闃?gòu)造函數(shù)多了參數(shù),多了一個參數(shù)處理的opcode。參數(shù)處理是一個比較費(fèi)時的操作,當(dāng)我們在做代碼優(yōu)化時,一些不必要的參數(shù)能去掉就去掉;當(dāng)一個函數(shù)有多個參數(shù)時,可以考慮通過一個數(shù)組將其封裝后傳遞進(jìn)來。

二、為啥第三個最慢?

因?yàn)槠浍@取參數(shù)其本質(zhì)上是一次對象成員方法的調(diào)用,方法的調(diào)用成本高于變量的獲取

三、為啥第四個比第三個要快?

因?yàn)榈谒膫€的操作實(shí)質(zhì)上獲取變量,只不過其內(nèi)部實(shí)現(xiàn)了魔術(shù)方法的調(diào)用,相對于用戶定義的方法,內(nèi)部函數(shù)的調(diào)用的效率會高。因此,當(dāng)我們有一些PHP內(nèi)核實(shí)現(xiàn)的方法可以調(diào)用時就不要重復(fù)發(fā)明輪子了。

四、為啥第四個比第二個要慢?

因?yàn)樵赑HP的對象獲取變量的過程中,當(dāng)成員變量在類的定義不在在時,會去調(diào)用PHP特有的魔術(shù)方法__get,多了一次魔術(shù)方法的調(diào)用。

總結(jié)一下:

使用PHP內(nèi)置函數(shù)

并不是事必面向?qū)ο?OOP),面向?qū)ο笸_銷很大,每個方法和對象調(diào)用都會消耗很多內(nèi)存。

盡量少用魔術(shù)方法 -- 除非有必要,不要用框架,因?yàn)榭蚣芏加写罅康哪g(shù)方法使用。

在性能優(yōu)先的應(yīng)用場景中,將成員變量設(shè)置為public,不失為一種比較好的方法,當(dāng)你需要用到OOP時。

能使用PHP語法結(jié)構(gòu)的不要用函數(shù),能使用內(nèi)置函數(shù)的不要自己寫,能用函數(shù)的不要用對象

總結(jié)

以上是生活随笔為你收集整理的php 获取对象所有成员变量,PHP成员变量获取对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲国产欧美一区 | 一本无码aⅴ久久久国产 | 一个综合色 | 国产日日操| 北条麻妃99精品青青久久 | 中文字幕黄色片 | 欧美小视频在线 | 人成在线免费视频 | 特级淫片aaaaaaa级附近的 | 卡通动漫av| 欧美精品小视频 | 黄视频免费在线看 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 成人欧美一区二区三区黑人免费 | 狠狠97| 亚洲精品国产精品乱码不卡 | 国产精品欧美一区二区 | 3p在线播放 | 国产成人短视频 | 久久激情小说 | av中文字幕一区二区三区 | 亚洲 欧美 自拍偷拍 | 影音先锋欧美在线 | 国产精品久久久av | 都市激情自拍 | 人人操在线播放 | 欧美黄片一区二区三区 | 韩国视频一区二区 | 夜夜骑av | 帮我拍拍漫画全集免费观看 | 亚洲欧美精品一区二区三区 | 久久婷婷五月综合 | 福利在线网站 | 欧美在线视频不卡 | 久久久久久久国产精品 | a免费看 | 日本三级黄色大片 | www.色播.com| 香蕉视频网站在线观看 | aa在线| 亚洲AV无码一区二区三区蜜桃 | 麻豆成人在线观看 | 亚洲女人天堂色在线7777 | 亚洲无码精品在线观看 | 欧美群妇大交群 | 91在线高清| 玩日本老头很兴奋xxxx | 亚洲涩综合 | 成人免费视频一区 | 五月天中文字幕mv在线 | 九色porny自拍视频在线播放 | 日韩精品在线第一页 | 亚洲国产免费 | 天堂av资源网| 国产又粗又猛又爽又黄的视频一 | 巨大黑人极品videos精品 | 欧美精品一区三区 | 女人一级一片30分 | 美女高潮黄又色高清视频免费 | 久久波多野 | 在线国产小视频 | 黄色大片网站在线观看 | 欧美日韩美女 | 中文字幕日韩欧美 | 青青伊人国产 | 亚洲精品一二三 | 欧美日韩国产一区二区在线观看 | 熟女丰满老熟女熟妇 | 亚洲黄色大片 | 日美女网站 | 麻豆传媒在线 | 特级黄色网 | 久久官网 | 天堂网在线最新版www中文网 | 91精品啪在线观看国产线免费 | 日本一区三区 | 涩涩网站免费 | 国产综合色视频 | 午夜成年人视频 | 欧美日韩视频在线播放 | 黄在线免费观看 | 亚洲精品国产乱伦 | 久久久亚洲欧美 | 青青青免费视频观看在线 | 亚洲熟妇av一区二区三区漫画 | 亚洲精品乱码久久久久久按摩观 | 91视频区| 亚洲精品视频中文字幕 | 麻豆精品久久久 | 成人短视频在线播放 | 一区二区免费在线播放 | 成人久草 | 日韩黄色一区二区 | 精品久久久久久久中文字幕 | 九九色影院| 婷婷国产成人精品视频 | 亚洲av永久无码精品一区二区国产 | 99精品久久久久久久 | 国模人体一区二区 |