Tôi sẽ nhận được kết quả tương tự?
Không hẳn vậy. Tuy nhiên, tôi không biết cách giải quyết cho PHP 5.2.
Sự khác biệt giữa new selfvà là new staticgì?
selfđề cập đến cùng một lớp trong đó newtừ khóa thực sự được viết.
static, trong các ràng buộc tĩnh muộn của PHP 5.3, đề cập đến bất kỳ lớp nào trong hệ thống phân cấp mà bạn gọi là phương thức trên.
Trong ví dụ sau, Bkế thừa cả hai phương thức từ A. Lệnh selfgọi bị ràng buộc Abởi vì nó được định nghĩa trong Aviệc thực hiện phương thức đầu tiên, trong khi đó staticbị ràng buộc với lớp được gọi (cũng xem get_called_class()).
class A {
public static function get_self() {
return new self();
}
public static function get_static() {
return new static();
}
}
class B extends A {}
echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self()); // A
echo get_class(A::get_static()); // A