2010-10-07 33 views
7

Trong PHP, get_included_files() trả về một mảng có tên của các tệp được bao gồm.Nhận danh sách hàm được gọi trong PHP

Theo cách tương tự, có cách nào để lấy một mảng có tên của các hàm được gọi với các tham số không?

Trả lời

4

Tôi đã cố gắng đạt được những gì bạn muốn và cuối cùng đã đưa ra một giải pháp hợp lý.

Tạo một lớp có tên Debug và bao gồm lớp đó ở trên mọi tệp bạn muốn gỡ lỗi. Tự xây dựng chức năng in độc đáo thông tin được lưu trữ trong $calls.

class Debug { 
    private static $calls; 

    public static function log($message = null) 
    { 
     if(!is_array(self::$calls)) 
      self::$calls = array(); 

     $call = debug_backtrace(false); 
     $call = (isset($call[1]))?$call[1]:$call[0]; 

     $call['message'] = $message; 
     array_push(self::$calls, $call); 
    } 
} 

Gọi chức năng này mỗi lần bạn khai báo một dòng đầu tiên chức năng trong functionbody: Debug::log($message(optional))

9

Bằng cách này, có cách nào để có được một mảng với tên của các hàm được gọi với các tham số không?

số

Những gì bạn có thể làm là một debug_backtrace() mà sẽ hiển thị tất cả các cuộc gọi chức năng (với các thông số) dẫn đến việc thực hiện các dòng bạn đang làm các vết lùi từ (các "cuộc gọi ngăn xếp "), nhưng khác với tất cả các hàm đã từng được gọi trong tập lệnh.

Bạn muốn làm gì? Có thể có một cách tiếp cận khác.

+3

Tôi gỡ một mã PHP phức tạp. – Pradip

+0

@Ozzone cho giải pháp workaround bạn sẽ phải tiết tú hơn - bản chất của vấn đề là gì, cách nhận danh sách tất cả các chức năng sẽ giúp ích, v.v. Có lẽ những gì bạn cần là một trình gỡ lỗi thực tế? –

2

Không phải là tôi biết.

Tuy nhiên, bạn có thể sử dụng debug_backtrace để nhận phân cấp chức năng/phương pháp hiện đang hoạt động.

1

Tôi không nghĩ có cách nào để làm những gì bạn muốn. Lấy làm tiếc.

Gần nhất tôi có thể nhận được là chức năng function_exists(), sẽ cho bạn biết liệu chức năng cụ thể đã được tải chưa.

Chính xác bạn muốn đạt được điều gì ở đây? Tôi không thể nhìn thấy một trường hợp sử dụng (bên ngoài một màn hình loại php_info()) mà sẽ yêu cầu một danh sách các chức năng có sẵn.

1

Bạn sẽ phải cài đặt nó như là một phần mở rộng, nhưng một hồ sơ như XHProf sẽ cung cấp cho bạn một sự cố trong đó chức năng được gọi và họ mất bao lâu, cũng như một cuộc gọi.

1

XHProf hoặc Webgrind/KCachegrind sẽ hiển thị cho bạn các hàm được gọi, chứ không hiển thị các tham số của chúng.

Bạn cũng có thể sử dụng get_defined_functions, cung cấp cho bạn danh sách tất cả các hàm được xác định. Nhưng nó sẽ không cho bạn thấy những chức năng nào thực sự được gọi, và với những tham số nào.

Nếu bạn thực sự cần phải biết các thông số, tôi không biết bất kỳ công cụ nào khác ngoài trình ghi nhật ký tùy chỉnh giống như trình Henze được cung cấp trong câu trả lời của anh ấy.

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