Есть ли разница между созданием экземпляра со скобками или без них?


В чем разница между этими 2 частями кодов?

<?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;
Author: Rizier123, 2015-03-07

2 answers

Они точно такие же, вы можете сравнить код операции этих 2 сценариев:

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
 21
Author: Rizier123, 2015-03-07 11:18:03

Оба равны. если вы не используете какое-либо соглашение о коде, то используйте то, что вам нравится. Я думаю, что $object1 = new User() было бы полезно вместо $object1 = new User. если бы вы передавали аргументы конструктору.

 0
Author: Rizwan Shah, 2016-06-03 19:15:31