2011-06-29 62 views
5
<?php 
class MyParent { 

    public static function tellSomething() { 
     return __CLASS__; 
    } 
} 

class MyChild extends MyParent { 

} 

echo MyChild::tellSomething(); 

Mã trên echos "MyParent". Làm thế nào tôi có thể nhận được tên của lớp trẻ em - trong trường hợp này "MyChild"? Nếu có thể ...Cách lấy tên lớp từ phương thức tĩnh tĩnh

Tôi chỉ cần biết con nào đang gọi phương thức được kế thừa.

+1

có thể trùng lặp của [Làm thế nào tôi có thể nhận được một cuộc gọi từ classname tĩnh trong một lớp học PHP mở rộng ?] (https://stackoverflow.com/questions/506705/how-can-i-get-the-classname-from-a-static-call-in-an-extended-php-class) – Theraot

Trả lời

7

__CLASS__ là một hằng số giả, luôn đề cập đến lớp, nơi nó được xác định. Với late-static-binding, hàm get_called_class() được giới thiệu, giải quyết tên lớp trong khi chạy.

class MyParent { 

    public static function tellSomething() { 
    return get_called_class(); 
    } 
} 

class MyChild extends MyParent { 

} 

echo MyChild::tellSomething(); 

(như một sidenote: thường phương pháp này không cần phải biết lớp trên được chúng được gọi là)

5

Những gì bạn mô tả được gọi là Late Static Bindings và được tạo sẵn trong PHP 5.3.

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