2010-10-13 33 views
7

Tôi có tập lệnh trong đó basename() được sử dụng 100-1000 lần, tôi chỉ nghĩ rằng nếu chúng ta có thể ghi đè hàm thay vì thay đổi tên hàm thành một cái gì đó khác trong tất cả các tập lệnh.Ghi đè hàm php mặc định

Sự cố với basename() là nó không hoạt động tốt với tên tệp bằng tiếng nước ngoài. Tôi tìm thấy một trên trang web php http://php.net/manual/en/function.override-function.php nhưng nó cần PECL bất kỳ giải pháp thay thế nào khác?

+4

Trên ghi chú liên quan, nếu nó không hoạt động tốt, hãy gửi báo cáo lỗi tại http://bugs.php.net/ – Artefacto

+0

@Artefacto, Đôi khi chúng không thể thay đổi nó do các vấn đề tương thích ngược. – Pacerier

Trả lời

7

Bạn có thể sử dụng không gian tên để ghi đè lên tên hàm hiện có:

namespace blarg; 
function basename() { 
    return 'whatever'; 
} 
$base = basename(); 

Ie, bất kỳ cuộc gọi đến basename() trong không gian tên blarg sẽ sử dụng phiên bản mới của hàm.

+3

Hãy nhớ rằng các không gian tên chỉ được hỗ trợ trong PHP 5.3 trở lên. – BoltClock

+0

Cố gắng ghi đè lên một hàm khác sẽ dẫn đến lỗi 'chức năng đã tồn tại'. Thiếu 5.3: tạo một hàm 'xbasename()' để đóng gói hàm cơ sở thực sự cùng với một phương thức khác để xử lý các ký tự không phải là ansi. Sau đó, CTRL-A & CTRL-H ... Tôi chắc rằng mọi người đều biết phần còn lại. –

+0

đôi khi ghi đè lên nhu cầu triển khai để gọi hàm ban đầu. Trong ví dụ này có cách gọi tên gốc ban đầu từ tên cơ sở mới không? –

1

Bạn có thể thay đổi vị trí trước khi gọi basename:

setlocale(LC_ALL, 'en_US.UTF8'); 

setlocale

2

Phương án thay thế sẽ là runkit. Nhưng điều đó dường như không được kích hoạt trên hầu hết các máy chủ.

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