2015-03-07 8 views
6

Jaka jest różnica między tymi 2 kodami?Czy istnieje różnica między instancjami z nawiasami lub bez?

<?php 

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

?> 

I:

<?php 

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

?> 

uzyskać ten sam wynik:

Hello 

Więc jest jakaś różnica, jeśli mogę użyć nawiasów lub brak:

$object1=new User; 
+6

Nie ma żadnej różnicy ... potrzebujesz tylko nawiasów podczas tworzenia instancji nowej klasy, jeśli musisz przekazać argumenty do konstruktora ... osobiście, wolę zawsze używać nawiasów, ponieważ powoduje to, że linia staje się lepiej w moim edytorze –

+0

W pierwszym użyłeś opcjonalnych nawiasów. Dlaczego nie czytasz książki PHP? –

+0

@TonyHopkinson właściwie czytam książkę PHP i widziałem przykłady kodu, gdy czasami autor używa parens, a czasami nie tak, myślałem, jaka jest różnica – BsD

Odpowiedz

18

Są dokładnie takie same, możesz porównać opcode tych 2 skryptów :

1 scenariusz:

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

opcode:

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

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

opcode:

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

Zdecydowanie premia za wykazanie różnic z vldem –

+0

to ODPOWIEDŹ! Miałem trudności ze spełnieniem minimum 30 znaków :) –

+1

Jak mogę zobaczyć kod operacyjny? – BsD

0

Obie są równe. jeśli nie używasz żadnej konwencji kodu, użyj tego, co lubisz. Myślę, że $object1 = new User() przydałoby się ponad $object1 = new User. jeśli przekazywałeś argumenty do konstruktora.

Powiązane problemy