php - 带括号和不带括号的实例化有区别吗?

标签 php oop instance

这两段代码有什么区别?

<?php

    $object1 = new User();
                     //^^
    $object1->name = "Hello";        
    echo $object1->name;
    class User {}

?>

和:

<?php

    $object1 = new User;
                    //^
    $object1->name = "Hello";        
    echo $object1->name;
    class User {}

?>

我得到相同的输出:

Hello

那么,如果我使用或不使用括号,有什么不同吗:

$object1=new User;

最佳答案

完全一样,你可以比较这两个脚本的操作码:

1 个脚本:

$object1=new User();
$object1->name="Hello";        
echo $object1->name;
class User {}

操作码:

line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   3     0  >   FETCH_CLASS                                   4  :0      'User'
         1      NEW                                              $1      :0
         2      DO_FCALL_BY_NAME                              0          
         3      ASSIGN                                                   !0, $1
   4     4      ASSIGN_OBJ                                               !0, 'name'
         5      OP_DATA                                                  'Hello'
   5     6      FETCH_OBJ_R                                      $5      !0, 'name'
         7      ECHO                                                     $5
   6     8      NOP                                                      
         9    > RETURN                                                   1

2 脚本:

$object1=new User;
$object1->name="Hello";        
echo $object1->name;
class User {}

操作码:

line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   3     0  >   FETCH_CLASS                                   4  :0      'User'
         1      NEW                                              $1      :0
         2      DO_FCALL_BY_NAME                              0          
         3      ASSIGN                                                   !0, $1
   4     4      ASSIGN_OBJ                                               !0, 'name'
         5      OP_DATA                                                  'Hello'
   5     6      FETCH_OBJ_R                                      $5      !0, 'name'
         7      ECHO                                                     $5
   6     8      NOP                                                      
         9    > RETURN                                                   1

关于php - 带括号和不带括号的实例化有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28914283/

相关文章:

php - Laravel:创建了一个服务但找不到类

php - 同步两个客户端之间的时间?

java - Java中的抽象与封装

python - Heroku 实例是否持久? (或者,我可以使用字典/数组作为缓存吗?)

php - Mysqli 从两个表中选择

c++ - 通常方法上的 Woverloaded-virtual 警告

具有实例方法的 Java 构造函数

c# - 为什么 C# 编译器在使用 LINQ 方法 Any() 时创建私有(private) DisplayClass,我该如何避免?

c# - 实例变量与参数传递?有争论吗?

php - 如何在 Laravel 5 中对合并的集合进行分页?