2010-01-26 35 views
43

im tạo chức năng nhật ký sẽ ghi nhật ký lỗi của tôi trong một tệp.lấy lớp và phương pháp hiện tại?

tôi nghĩ rằng nó sẽ chứa trong đó lớp học và phương pháp lỗi xảy ra trong.

là có một cách để khai thác gỗ trong đó lớp học và phương pháp lỗi xảy ra trong vì vậy tôi không phải gõ nó bằng tay mỗi lần?

+0

Bạn có thể muốn cung cấp thêm thông tin về lớp logger của bạn và làm thế nào bạn có ý định gọi nó. – Gordon

Trả lời

65

Tôi không lớn trên PHP nhưng tôi tin rằng nó có "hằng số ma thuật" tương tự như C/C++. Hãy xem here: Đây dường như chỉ ra bạn có thể sử dụng

__LINE__, __FILE__, __FUNCTION__, __CLASS__, and __METHOD__ 
+1

Nếu được gọi trong khai báo lớp cha của một hàm, hàm này trả về cấp độ gốc, không phải lớp mở rộng – paullb

+1

Bạn có thể tìm tất cả các hằng số được xác định trước tại đây: http://php.net/manual/en/language.constants.predefined. php – Ramazan

5

get_called_class() lấy lớp hiện tại. Điều này cũng có thể thú vị: debug_print_backtrace().

+0

không đúng sự thật. Nó nhận được lớp kết buộc tĩnh muộn. – Gordon

+0

Bạn nói đúng, tôi quên bối cảnh vì tôi vừa mới sử dụng nó vào ngày mai. Nhưng có thể thú vị sao? – Thomas

5

sử dụng __METHOD__ liên tục trong PHP5

35

Trong trường hợp của bạn trong một lớp học phụ huynh/cơ sở, __CLASS__ sẽ trả lại tên lớp phụ huynh/cơ sở đó không được mong muốn. Trong trường hợp mà bạn có thể sử dụng get_class():

get_class($this) 
+4

Thao tác này sẽ không hoạt động trong môi trường tĩnh! –

+0

Điều này có được lớp con ngay cả khi bạn đang ở trong một phương pháp được xác định trong phụ huynh. – paullb

3

Trong các phiên bản PHP hiện tại (5.5+), bạn nên sử dụng static::class

Nó hoạt động cả trong các phương pháp tĩnh và dụ và trả về tên lớp thực tế, ngay cả khi phương pháp này cơ thể được định nghĩa trong một siêu lớp.

+0

Trong PHP 7.1 nếu phần thân phương thức được định nghĩa trong một lớp siêu tĩnh :: class trả về tên của siêu lớp – g4b0

+0

@ g4b0 không, nó không. Tôi vừa thử nghiệm kịch bản này với PHP 7.1.8: 'class A {function f() {return static :: class;}} lớp B mở rộng A {} $ b = new B; echo $ b-> f(); 'và nó in chính xác B, ngay cả khi phương pháp đã được xác định trong A. – Tobia

+0

Đừng quên sự khác biệt giữa' self' và 'static'. 'static' sẽ tham chiếu đến lớp mà nó được gọi khi' self' là lớp được tạo ra. – skerit

1

Trong Laravel 5 CLASS đã trả về không gian tên và tên lớp, do đó, nó là một chuỗi lớn. Vì vậy, đây là cách bạn có được lớp hiện tại mà không tất cả những thứ khác:

echo (new \ReflectionClass($this))->getShortName(); 
Các vấn đề liên quan