2015-03-07 80 views
6

Sự khác biệt giữa 2 đoạn mã này là gì?Có sự khác biệt nào giữa việc khởi tạo với dấu ngoặc đơn hay không?

<?php 

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

?> 

Và:

<?php 

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

?> 

Tôi nhận được cùng một kết quả:

Hello 

Vậy là có bất kỳ sự khác biệt nếu tôi sử dụng các dấu ngoặc đơn hoặc không nằm ở:

$object1=new User; 
+6

Không có sự khác biệt .... bạn chỉ cần dấu ngoặc khi tạo một thể hiện lớp mới nếu bạn cần truyền bất kỳ đối số nào cho hàm tạo ... cá nhân, tôi luôn sử dụng dấu ngoặc đơn, vì nó làm cho đường thẳng đứng tốt hơn trong trình soạn thảo của tôi –

+0

Trong phần đầu tiên bạn đã sử dụng các dấu ngoặc đơn tùy chọn. Tại sao bạn không đọc một cuốn sách PHP .. –

+0

@TonyHopkinson thực sự tôi đang đọc cuốn sách PHP và thấy ví dụ mã khi đôi khi tác giả sử dụng các parens và đôi khi không như vậy, tôi nghĩ whats sự khác biệt – BsD

Trả lời

18

Chính xác là như nhau, bạn có thể so sánh opcode của 2 script này :

1 kịch bản:

$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 kịch bản:

$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

Chắc chắn là một tiền thưởng cho việc chứng minh sự khác biệt với vld –

+0

đó là một câu trả lời! Tôi sẽ gặp khó khăn để đáp ứng tối thiểu 30 ký tự :) –

+1

Làm cách nào tôi có thể xem opcode? – BsD

0

Cả hai đều bằng nhau. nếu bạn không sử dụng bất kỳ quy ước mã nào thì hãy sử dụng cái mà bạn thích. Tôi nghĩ rằng $object1 = new User() sẽ hữu ích hơn $object1 = new User. nếu bạn đang chuyển đối số cho hàm tạo.

Các vấn đề liên quan