这篇文章主要为大家详细介绍了PHP成员变量获取速度对比示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随四海网的小玲来看看吧!
有如下4个代码示例,你认为他们创建对象,并且获得成员变量的速度排序是怎样的?
1:将成员变量设置为public,通过赋值操作给成员变量赋值,直接获取变量
代码如下:
<?php
/* 四海网 www.q1010.com */
class Foo {
public $id;
}
$data = new Foo;
$data->id = 10;
echo $data->id;
?>
代码如下:
<?php
/* 四海网 www.q1010.com */
class Foo2 {
public $id;
public function __construct($id) {
$this->id = $id;
}
}
$data = new Foo2(10);
echo $data->id;
?>
3:将成员变量设置为protected,通过构造函数设置成员变量的值,通过魔术方法获取变量
代码如下:
<?php
/* 四海网 www.q1010.com */
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:将成员变量设置为protected,通过构造函数设置成员变量的值,通过成员方法获取变量
<?php
/* 四海网 www.q1010.com */
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;
?>
按执行速度快慢排序: 1243
咱们先看其opcode:
1:
代码如下:
ZEND_FETCH_CLASS 4 :4 'Foo'
NEW $5 :4
DO_FCALL_BY_NAME 0
ASSIGN !0, $5
ZEND_ASSIGN_OBJ !0, 'id'
ZEND_OP_DATA 10
FETCH_OBJ_R $9 !0, 'id'
ECHO $9
代码如下:
ZEND_FETCH_CLASS 4 :10 'Foo2'
NEW $11 :10
SEND_VAL 10
DO_FCALL_BY_NAME 1
ASSIGN !1, $11
FETCH_OBJ_R $14 !1, 'id'
ECHO $14
代码如下:
ZEND_FETCH_CLASS 4 :15 'Foo3'
NEW $16 :15
SEND_VAL 10
DO_FCALL_BY_NAME 1
ASSIGN !2, $16
ZEND_INIT_METHOD_CALL !2, 'getId'
DO_FCALL_BY_NAME 0 $20
ECHO $20
代码如下:
ZEND_FETCH_CLASS 4 :21 'Foo4'
NEW $22 :21
END_VAL 10
DO_FCALL_BY_NAME 1
ASSIGN !3, $22
FETCH_OBJ_R $25 !3, 'id'
ECHO $25
本文来自:http://www.q1010.com/173/16444-0.html
注:关于PHP成员变量获取速度对比示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。
关键词:变量
四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。