2014-09-20 18 views
6

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

+2

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

Trả lời

4

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).

+0

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! –

4

Đã 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

+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. –

+1

Tôi rất vui vì tôi có thể giúp đỡ .. :) – hek2mgl

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