2015-03-07 8 views
6

Qual è la differenza tra questi 2 codici?C'è una differenza tra l'istanziazione con parentesi o senza?

<?php 

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

?> 

E:

<?php 

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

?> 

ottengo lo stesso risultato:

Hello 

Quindi v'è alcuna differenza se uso le parentesi o meno in:

$object1=new User; 
+6

Non c'è alcuna differenza .... hai bisogno di parentesi solo quando istanziate una nuova istanza di classe se è necessario passare qualsiasi argomento al costruttore ... personalmente, preferisco sempre usare le parentesi, in quanto rende quella linea meglio nel mio editor –

+0

Nella prima hai usato le parentesi opzionali. Perché non leggi un libro in PHP .. –

+0

@TonyHopkinson in realtà sto leggendo il libro PHP e ho visto esempi di codice quando a volte l'autore usa i parents e qualche volta no, ho pensato che differenza c'e ' – BsD

risposta

18

Sono esattamente gli stessi, puoi confrontare l'opcode di questi 2 script :

1 script:

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

codice operativo:

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 script:

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

codice operativo:

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 
+3

Sicuramente un bonus per dimostrare le differenze con il vld –

+0

che è una RISPOSTA! Avrei difficoltà ad incontrare il minimo di 30 caratteri :) –

+1

Come posso vedere l'opcode? – BsD

0

Entrambi sono uguali. se non usi alcuna convenzione di codice, usa quello che ti piace. Penso che $object1 = new User() sarebbe utile su $object1 = new User. se si passavano gli argomenti al costruttore.