2011-10-06 28 views
8

Chỉ cần tự hỏi là tốt nhất để định nghĩa một hàm tạo rỗng hoặc để định nghĩa hàm tạo ra hoàn toàn trong PHP? Tôi có thói quen xác định các nhà thầu chỉ với return true;, ngay cả khi tôi không cần người xây dựng để làm bất cứ điều gì - chỉ vì lý do hoàn thành.PHP constructor rỗng

Trả lời

10

Nếu bạn không cần một nhà xây dựng, tốt nhất là bỏ nó ra, không cần phải viết thêm mã. Khi bạn viết nó, hãy để trống ... trả lại đúng không có mục đích.

1

hàm tạo luôn trả về cá thể của lớp trong đó được xác định. Do đó bạn không bao giờ sử dụng "return" bên trong constructor. Cuối cùng thì tốt hơn là không định nghĩa nó nếu bạn không dùng nó.

+0

Giá trị trả lại của hàm khởi tạo bị bỏ qua hoàn toàn. – KingCrunch

+0

thực sự nếu tôi tìm thấy ai đó quay trở lại bên trong nhà xây dựng ở vị trí đầu tiên, tôi sẽ không bao giờ hợp nhất mã của anh ta với tôi. –

2

Bạn chỉ nên xác định hàm khởi tạo trống nếu đối tượng của bạn không bao giờ được khởi tạo. Nếu đúng như vậy, hãy đặt __construct() riêng tư.

5

EDIT:

câu trả lời trước là không còn giá trị, kể từ PHP tại hoạt động như ngôn ngữ lập trình oop khác. Các nhà thầu không phải là một phần của giao diện. Vì vậy bây giờ bạn được phép ghi đè lên chúng làm thế nào bạn thích mà không cần bất kỳ vấn đề nào

ngoại lệ duy nhất cho điều này là:

interface iTest 
{ 
    function __construct(A $a, B $b, Array $c); 
} 

class Test implements iTest 
{ 
    function __construct(A $a, B $b, Array $c){} 
    // in this case the constructor must be compatible with the one specified in the interface 
    // this is something that php allows but that should never be used 
    // in fact as i stated earlier, constructors must not be part of interfaces 
} 

TRƯỚC OLD KHÔNG-HỢP LỆ-NỮA ĐÁP:

có là sự khác biệt quan trọng giữa một hàm tạo trống và không có hàm tạo nào tại tất cả

class A{} 

class B extends A{ 
    function __construct(ArrayObject $a, DOMDocument $b){} 
} 

VS 

class A{ 
    function __construct(){} 
} 
class B extends A{ 
    function __construct(ArrayObject $a, DOMDocument $b){} 
} 

// error B::__construct should be compatible with A constructor 
+0

Không chỉ vậy, nhưng nếu 'A' có một hàm tạo đã định nghĩa và' B' có một hàm tạo, rỗng, đã định nghĩa, thì về cơ bản bạn sẽ loại bỏ hàm tạo, nhưng nếu bạn bỏ nó ra thì bạn sẽ kế thừa constructor. Các upshot là bạn không nên "luôn luôn" hoặc "không bao giờ" bao gồm một nhà xây dựng có sản phẩm nào, và nó không "luôn luôn" có nghĩa là cùng một điều khi bạn làm một hay khác. Đó là tất cả về ngữ cảnh. – Jason

3

Có sự khác biệt giữa hai: Nếu bạn viết một hàm trống rỗng __construct(), bạn ghi đè bất kỳ thừa kế nào __construct() từ lớp cha.

Vì vậy, nếu bạn không cần nó và bạn không muốn ghi đè lên hàm tạo mẹ một cách rõ ràng, đừng viết nó.

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