Trong PHP, bạn có thể xác định bí danh lớp bằng cách sử dụng class_alias
function. Có cách nào để có được một danh sách tất cả các bí danh lớp hiện đang được xác định trong thời gian chạy không?Danh sách tất cả các Bí danh PHP
Trả lời
Vì hek2mgl cho thấy điều này là không thể trong PHP. Tùy thuộc vào lý do tại sao bạn muốn điều này có thể có cách giải quyết khả thi mặc dù.
Tôi giả sử ngay bây giờ bạn đang cố gắng phát hiện các bí danh được tạo trong mã của bên thứ ba. Bạn có thể sau đó install the Runkit module, thiết runkit.internal_override
-1
để cho phép sửa đổi chức năng bản địa, và làm điều gì đó như thế này trong các tập tin gốc của dự án của bạn:
runkit_function_rename('class_alias', 'class_alias_internal');
function class_alias($original, $alias, $autoload = TRUE)
{
Logsomewhere("Creating alias from $original to $alias!");
class_alias_internal($original, $alias, $autoload);
}
Tất nhiên điều này cũng có nghĩa là bạn có thể xây dựng một cách chính xác trong danh sách bạn tìm kiếm. Tôi không thấy bất kỳ thời gian chạy sản xuất sử dụng cho chức năng này (đúng tôi nếu tôi sai) vì vậy bạn chỉ phải làm điều này trên một máy chủ phát triển cho đến khi cần thiết. Vì Runkit là một mô-đun nguy hiểm, tôi thậm chí sẽ vô hiệu hóa nó trên máy chủ ảo ngay khi bạn hoàn thành nó.
Đối với các kịch bản khác, cách khắc phục tương tự có thể là khả thi, nhưng tôi cần biết lý do bạn tìm thông tin này. Theo như PHP là có liên quan một bí danh là nghĩa vụ không thể phát hiện được, do đó, nó làm tốt công việc của mình (để thay đổi).
Nghi ngờ nhiều, và có, nó phát hiện bí danh trong mã của bên thứ ba. Cảm ơn bạn đã đề xuất runkit! –
Đã xem mã nguồn của PHP. Sau khi bí danh đã được đăng ký, PHP không biết về bản gốc và bí danh là gì. Giống như hardlinking trong hệ thống tệp. Bạn có thể xem các mã, trong đó hầu hết các phiên bản gần đây, ở đây: (. Lưu ý rằng liên kết thể là lỗi thời tại thời điểm bạn đang đọc này tìm kiếm các chức năng zend_register_class_alias_ex
sau đó.) https://github.com/php/php-src/blob/master/Zend/zend_API.c#L2728
Tuy nhiên, một chức năng cho thấy các mục của bảng lớp có nhiều tham chiếu có tên là nó có thể được tạo ra (trong lõi của PHP, với C) nhưng có vẻ như nó không có sẵn tại thời điểm này.
+1 Tôi đánh giá cao sự đào tạo của bạn thông qua nguồn cho tôi - đó là một trong những điều tôi muốn tôi giỏi hơn. –
Tôi rất vui vì tôi có thể giúp đỡ .. :) – hek2mgl
- 1. Danh sách tất cả các lỗi PHP có thể
- 2. danh sách PHP tất cả các file trong thư mục
- 3. Bí danh cho tất cả các phương thức quá tải?
- 4. Danh sách MySQL Tất cả trùng lặp
- 5. Danh sách tất cả backends matplotlib sẵn
- 6. Chia danh sách thành hai danh sách con trong tất cả các cách có thể
- 7. Cân bằng độ dài của tất cả các danh sách trong một danh sách?
- 8. Tất cả các khả năng chia danh sách thành hai danh sách
- 9. Xóa tất cả các giá trị trong một danh sách khỏi một danh sách khác?
- 10. clojure - danh sách tất cả các hoán vị của một danh sách
- 11. Cách lấy danh sách tất cả các đối tượng? - PostgreSQL
- 12. Danh sách tất cả các lớp miền trong Grails
- 13. Danh sách tất cả các tệp đang mở
- 14. Tất cả các hoán vị của một danh sách
- 15. truy xuất danh sách tất cả các nhãn trong blogger
- 16. LINQ: Nhận danh sách tất cả các bảng trong DataContext
- 17. Cách nhận tất cả các mục khác trong danh sách
- 18. SQL Server tất cả các danh sách lỗi?
- 19. Nhận danh sách tất cả các lần bấm với Git
- 20. Danh sách tất cả các máy chủ trên mạng LAN
- 21. Thu hẹp tất cả các phần tử trong danh sách
- 22. ASP.NET MVC4 Danh sách tất cả các khu vực
- 23. Danh sách tất cả các màu có sẵn cho PowerShell?
- 24. Định dạng tất cả các phần tử trong danh sách
- 25. Lấy Danh sách tất cả các Màn hình Xorg
- 26. In danh sách TẤT CẢ các biến môi trường
- 27. tất cả các giá trị danh sách giống nhau
- 28. Danh sách tất cả các mã lỗi OLE
- 29. Danh sách tất cả các cam kết git?
- 30. Xóa tất cả các mục từ một danh sách
Không, nhưng nếu bạn là người duy nhất tạo bí danh, bạn có thể làm cho một số loại lớp đơn bao bọc để xử lý điều này cho ya. – Smuuf