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 self
và là new static
gì?
self
đề cập đến cùng một lớp trong đó new
từ 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, B
kế thừa cả hai phương thức từ A
. Lệnh self
gọi bị ràng buộc A
bởi vì nó được định nghĩa trong A
việc thực hiện phương thức đầu tiên, trong khi đó static
bị 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