Tại sao tôi nên sử dụng function __construct()
thay vì function className()
trong PHP 5?Tại sao PHP 5 sử dụng __contruct() thay vì className() làm hàm tạo?
Trả lời
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.
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.
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.
Tác vụ '__autoload()' có phân biệt nếu bạn sử dụng '_construct()' hay 'className()'? –
Tôi muốn C++ và Java sử dụng chữ ký phương thức ctor()/dtor(). : -/ –
@Click Upvote Có. __autoload() không quan tâm kiểu dáng của hàm tạo được sử dụng. – Asaph
Bởi vì nó đã được thống nhất với phương pháp __destruct() và phương pháp đặc biệt khác bắt đầu bằng hai dấu gạch ví dụ __get, __sleep, __serialize http://us2.php.net/manual/en/language.oop5.magic.php
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ã.
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.
- 1. Tại sao hàm tạo được sử dụng thay cho hàm?
- 2. Tại sao sử dụng phương thức khởi tạo thay vì hàm tạo?
- 3. Tại sao hàm tạo bản sao được gọi thay vì hàm tạo chuyển đổi?
- 4. sử dụng Classname() hoặc __construct() làm hàm tạo trong CodeIgniter?
- 5. Tại sao hàm tạo bản sao này được gọi thay vì hàm tạo di chuyển?
- 6. tại sao nó sử dụng movl thay vì đẩy?
- 7. Tệp kê khai Android: Tại sao đôi khi "<classname>" thay vì chỉ "<classname>"?
- 8. Tại sao UnderscoreJS sử dụng toString.call() thay vì typeof?
- 9. Tại sao nên sử dụng Function.prototype.bind thay vì Function.prototype.call?
- 10. Tại sao sử dụng singleton thay vì lớp tĩnh?
- 11. Tại sao sử dụng singleton thay vì phương pháp tĩnh?
- 12. Tại sao sử dụng ROLAP thay vì MySQL đơn giản?
- 13. Tại sao sử dụng jQuery trên() thay vì nhấp chuột()
- 14. Tại sao memo.Lines sử dụng TStrings thay vì TStringList?
- 15. Tại sao sử dụng Celery thay vì RabbitMQ?
- 16. Tại sao sử dụng registerDefaults: thay vì setValue: forKey :?
- 17. Tại sao RTP sử dụng UDP thay vì TCP?
- 18. Tại sao sử dụng tai thay vì chiến tranh?
- 19. Tại sao sử dụng Enums thay vì Constants?
- 20. Tại sao nên sử dụng GWT.create() thay vì mới?
- 21. Android: tại sao phải sử dụng getBaseContext() thay vì
- 22. Tại sao sử dụng char [] thay vì String?
- 23. Tại sao sử dụng var thay vì tên lớp?
- 24. Tại sao sử dụng NuSOAP thay vì SOAP PHP? Bất kỳ lợi ích nào?
- 25. PHP khi sử dụng filter_var thay vì các hàm php dựng sẵn
- 26. Tại sao sử dụng tăng :: ice_or thay vì || và tăng :: ice_and thay vì && trong enable_if?
- 27. Tại sao CHỌN 0, ... thay vì CHỌN
- 28. Tại sao tạo serialVersionUID dài thay vì 1L đơn giản?
- 29. Sử dụng SoapServer PHP 5?
- 30. Tại sao PHP không có hàm tạo mặc định?
@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
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. –