2012-07-20 28 views
11

Tôi đã nghe nói về get_class_methods() nhưng có cách nào trong PHP để thu thập một mảng của tất cả các phương thức công khai từ một lớp cụ thể không?PHP cách liệt kê tất cả các chức năng công khai của lớp

+0

Uhm, 'get_class_methods ($ class)' * là * một cách để thu thập một mảng của tất cả các phương thức công khai của một lớp cụ thể ... –

+0

nếu bạn muốn sử dụng 'get_class_meth ods' để lấy phương pháp công khai ONLY, nó phải được sử dụng bên ngoài lớp .. – Federkun

+0

get_class_methods ($ class) trả về tất cả các phương thức hoặc là công khai hoặc không có một từ khóa. Vì vậy, bất kỳ phương pháp riêng tư nào cũng sẽ không được trả lại – daslicht

Trả lời

1

Bạn đã thử cách này chưa?

$class_methods = get_class_methods(new myclass()); 

foreach ($class_methods as $method_name) { 
    echo "$method_name\n"; 
} 
+2

Tôi nghĩ Kristian đang yêu cầu cụ thể để liệt kê các phương pháp công khai. – Stegrex

7

Sau khi nhận được tất cả các phương pháp với get_class_methods($theClass) bạn có thể lặp qua chúng với một cái gì đó như thế này:

foreach ($methods as $method) { 
    $reflect = new ReflectionMethod($theClass, $method); 
    if ($reflect->isPublic()) { 
    } 
} 
8

Như get_class_methods() là phạm vi nhạy cảm, bạn có thể nhận được tất cả các phương thức công khai của một lớp học chỉ bằng cách gọi hàm từ bên ngoài phạm vi của lớp:

Vì vậy, hãy lớp này:

class Foo { 
    private function bar() { 
     var_dump(get_class_methods($this)); 
    } 

    public function baz() {} 

    public function __construct() { 
     $this->bar(); 
    } 
} 

var_dump(get_class_methods('Foo')); chí đầu ra như sau:

array 
    0 => string 'baz' (length=3) 
    1 => string '__construct' (length=11) 

Trong khi một cuộc gọi từ bên trong phạm vi của lớp (new Foo;) sẽ quay trở lại:

array 
    0 => string 'bar' (length=3) 
    1 => string 'baz' (length=3) 
    2 => string '__construct' (length=11) 
Các vấn đề liên quan