微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 在构造函数VS上设置变量在类定义上

最近我一直在想,是否在类定义上初始化构造函数VS上的认值的变量之间有区别.

一个更好,考虑到优化:

class TestClass
{
 private $test_var = 'Default Value';
 function __construct()
 {
 }
}

class TestClass2
{
 private $test_var;
 function __construct()
 {
  $this->test_var = 'Default Value';
 }
}
初始化构造函数之外的属性的优点是,读取代码的人将立即知道其认值.

不方便的是,您不能以这种方式使用各种数据 – 不会使用对象实例,例如或使用heredoc语法,从我记得.

我认为在性能方面有很大的不同 – 反正在你的应用程序中,可能还有很多事情会变得更重要;-)

仍然,纯粹为了乐趣,使用Vulcan Logic disassembler:

使用第一个代码示例(temp-2.PHP):

<?PHP
class TestClass {
    private $test_var = 'Default Value';
    function __construct() {
    }
}
$a = new TestClass();

你得到这些操作码:

$PHP -d extension=vld.so -d vld.active=1 temp-2.PHP
Branch analysis from position: 0
Return found
filename:       /home/squale/developpement/tests/temp/temp-2.PHP
function name:  (null)
number of ops:  11
compiled vars:  !0 = $a
line     #  op                           fetch          ext  return  operands
-------------------------------------------------------------------------------
   2     0  EXT_STMT
         1  nop
   7     2  EXT_STMT
         3  ZEND_FETCH_CLASS                                 :1      'TestClass'
         4  EXT_FCALL_BEGIN
         5  NEW                                              $2      :1
         6  DO_FCALL_BY_NAME                              0
         7  EXT_FCALL_END
         8  ASSIGN                                                   !0,$2
         9  RETURN                                                   1
        10* ZEND_HANDLE_EXCEPTION

Class TestClass:
Function __construct:
Branch analysis from position: 0
Return found
filename:       /home/squale/developpement/tests/temp/temp-2.PHP
function name:  __construct
number of ops:  4
compiled vars:  none
line     #  op                           fetch          ext  return  operands
-------------------------------------------------------------------------------
   4     0  EXT_nop
   5     1  EXT_STMT
         2  RETURN                                                   null
         3* ZEND_HANDLE_EXCEPTION

End of function __construct.

End of class TestClass.

而第二个例子代码(temp-3.PHP):

<?PHP
class TestClass2 {
    private $test_var;
    function __construct() {
        $this->test_var = 'Default Value';
    }
}
$a = new TestClass2();

你得到这些操作码:

$PHP -d extension=vld.so -d vld.active=1 temp-3.PHP
Branch analysis from position: 0
Return found
filename:       /home/squale/developpement/tests/temp/temp-3.PHP
function name:  (null)
number of ops:  11
compiled vars:  !0 = $a
line     #  op                           fetch          ext  return  operands
-------------------------------------------------------------------------------
   2     0  EXT_STMT
         1  nop
   8     2  EXT_STMT
         3  ZEND_FETCH_CLASS                                 :1      'TestClass2'
         4  EXT_FCALL_BEGIN
         5  NEW                                              $2      :1
         6  DO_FCALL_BY_NAME                              0
         7  EXT_FCALL_END
         8  ASSIGN                                                   !0,$2
   9     9  RETURN                                                   1
        10* ZEND_HANDLE_EXCEPTION

Class TestClass2:
Function __construct:
Branch analysis from position: 0
Return found
filename:       /home/squale/developpement/tests/temp/temp-3.PHP
function name:  __construct
number of ops:  7
compiled vars:  none
line     #  op                           fetch          ext  return  operands
-------------------------------------------------------------------------------
   4     0  EXT_nop
   5     1  EXT_STMT
         2  ZEND_ASSIGN_OBJ                                          'test_var'
         3  ZEND_OP_DATA                                             'Default+Value'
   6     4  EXT_STMT
         5  RETURN                                                   null
         6* ZEND_HANDLE_EXCEPTION

End of function __construct.

End of class TestClass2.

所以,我猜想有一点区别…但不是那么重要^^

直到你解释操作码 – 但有趣的是,在第一个转储中没有“认值”的痕迹…有趣,实际上是^^似乎VLD不能(或只是不)倾倒一切:-(

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中NATIVE的支付实现流程与PC端实现扫码支付流程
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中APP的支付的配置与实现流程
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户信息这个功能的开发流程。 配置 1.首先得在微信公众平台申请一下微信小程序账号并获取到小程序的AppID和AppSecret https://mp.weixin.qq.com/cgi-bin/loginpage?url=%2Fwxamp%2F
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一款开源且免费商用的后台开发框架,它基于ThinkPHP和Bootstrap两大主流技术构建的极速后台开发框架,它有着非常完善且强大的功能和便捷的开发体验,使我逐渐喜欢上了它。
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛,就离不开通讯了,然后我就想到了长连接。这里本人用的是GatewayWorker框架。
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中JSAPI的支付实现流程
服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用