Tại sao tôi không thể sử dụng mã như thế này?Tại sao PHP không có hàm tạo mặc định?
<?php
class NoConstructor {
}
class ChildWithConstructor extends NoConstructor {
public function __construct() {
parent::__construct();
// do something
}
}
$foo = new ChildWithConstructor();
// **Fatal error: Cannot call constructor in file.php on line 8**
Ví dụ: Các lớp Java có mặc định, không có hàm tạo args. Nó có thể được gọi ngay cả khi nó không được xác định rõ ràng.
Hành vi của PHP có thể gây ra sự cố khi chúng tôi xóa không có hàm tạo args nào từ lớp cha, ví dụ: khi chúng tôi nghĩ rằng nó không cần thiết nữa.
Có ai biết tại sao người sáng tạo PHP làm theo cách này không?
Bên cạnh câu hỏi của bạn, bạn nên biết rằng bạn có thể giải quyết vấn đề này: kiểm tra sự tồn tại của hàm trước cuộc gọi. –
Những người tạo PHP đã thực hiện một * nhiều * quyết định ngớ ngẩn ... –
http://www.php.net/manual/en/function.is-callable.php: if (is_callable ('parent :: __ construct')) { parent :: __ construct(); } –