2009-10-06 45 views

Trả lời

2

Tôi đoán sẽ là do thời gian khả năng hướng đối tượng được là thêm vào PHP, các nhà thiết kế đã nhìn vào Python.

+5

@Click Upvote Thú vị rằng bạn đã chọn câu trả lời này là câu trả lời đúng. Nó thậm chí không trả lời kỹ thuật câu hỏi của bạn "Tại sao tôi nên sử dụng hàm __construct() thay vì hàm className() trong PHP 5?" – Asaph

+1

Thật vậy, tôi đã thực sự chỉ là một người có tính cạnh tranh. Câu trả lời của Asaph chắc chắn hữu ích hơn nhiều. –

4

Vì php5 muốn giống như python hơn.

Tôi là đứa trẻ, tôi nhóc ...

Có phương pháp chuẩn cho các hành động chuẩn, như xây dựng, là giải pháp hợp lý. Cũng giống như trong các lớp C#, khi bạn mở rộng một lớp, bạn sử dụng base để gọi các hàm tạo lớp cơ sở thay vì một đối tượng được đặt tên: nó đơn giản hóa mã và bảo trì dễ dàng hơn.

27

Các phương pháp/hàm ma thuật __ có vẻ là một chủ đề nhất quán trong PHP (một lần!). Một lợi thế của việc sử dụng __construct() trên ClassName() làm hàm tạo là nếu bạn thay đổi tên của lớp, bạn không cần cập nhật hàm tạo.

+2

Tác vụ '__autoload()' có phân biệt nếu bạn sử dụng '_construct()' hay 'className()'? –

+1

Tôi muốn C++ và Java sử dụng chữ ký phương thức ctor()/dtor(). : -/ –

+0

@Click Upvote Có. __autoload() không quan tâm kiểu dáng của hàm tạo được sử dụng. – Asaph

1

Bằng cách làm như vậy luôn, bạn có thể gọi hàm tạo từ lớp siêu (cơ sở) mà không cần phải biết tên của nó. Điều này rất hữu ích cho việc duy trì lớp học, bởi vì bạn không muốn cập nhật tất cả các lớp học của bạn chỉ vì bạn sắp xếp lại các lớp học của mình

và ... chỉ đoán .. nếu tất cả các lớp đặt tên __construct(), trong lý thuyết một hàm tạo có thể được thừa hưởng từ một lớp cha mà không cần bất kỳ định nghĩa bắt buộc nào. Điều này có ý nghĩa trong cây lớp, nơi có các lớp trừu tượng trung gian, và trong các cấu trúc như trong mục tiêu C, ở đó hàm khởi tạo mặc định được bắt nguồn hoàn toàn từ siêu dữ liệu lớp và do đó (trong priciple!) Sẽ không cần viết mã.

0

Câu hỏi cũ, nhưng tôi sẽ cắn vì chưa có ai trả lời câu hỏi thực tế.

function className() là PHP4-style constructor.

chức năng __construct() là PHP5-style constructor.

Bạn nên sử dụng tùy chọn sau vì mục cũ không được dùng nữa và có thể bị xóa khỏi ngôn ngữ.

Ngoài ra, trước đây, có thể hoặc không thể bỏ qua các khái niệm OO PHP5 khác nhau, chẳng hạn như nhà khai thác hiển thị công khai/riêng tư. Không phải là bạn muốn làm cho hàm tạo riêng tư nếu bạn không sử dụng các mẫu Singleton hoặc Factory.

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