Làm cách nào để tìm tên tệp của tập lệnh được gọi là chức năng của tôi?Tìm ra tên tệp được gọi là hàm của tôi trong PHP
Ví dụ,
function sthing() {
echo __FILE__; // echoes myself
echo __CALLER_FILE__; // echoes the file that called me
}
Làm cách nào để tìm tên tệp của tập lệnh được gọi là chức năng của tôi?Tìm ra tên tệp được gọi là hàm của tôi trong PHP
Ví dụ,
function sthing() {
echo __FILE__; // echoes myself
echo __CALLER_FILE__; // echoes the file that called me
}
Một giải pháp có thể sử dụng chức năng debug_backtrace
: trong vết lùi mà loại thông tin nên có mặt.
Hoặc, như Gordon đã chỉ ra trong nhận xét, bạn cũng có thể sử dụng debug_print_backtrace
nếu bạn chỉ muốn xuất thông tin đó và không hoạt động với thông tin đó.
Ví dụ, với temp.php
chứa này:
<?php
include 'temp-2.php';
my_function();
và với temp-2.php
chứa này:
<?php
function my_function() {
var_dump(debug_backtrace());
}
Calling temp.php
(i.e. the first script)
từ trình duyệt của tôi được tôi đầu ra này:
array
0 =>
array
'file' => string '/.../temp/temp.php' (length=46)
'line' => int 5
'function' => string 'my_function' (length=11)
'args' =>
array
empty
Ở đó, tôi có tên tệp "temp.php
" - là tên tệp mà hàm đã được gọi.
Tất nhiên, bạn sẽ phải kiểm tra thêm một chút (đặc biệt là trong những tình huống mà các chức năng không phải là trong bảng "Cấp đầu tiên" bao gồm tập tin, nhưng trong một tập tin bao gồm bằng nhau - không chắc chắn debug_backtrace
sẽ giúp ích nhiều, ở đó ...); nhưng điều này có thể giúp bạn có được một ý tưởng đầu tiên ...
Ngoài đề nghị Pascal Martins, bạn có thể cài đặt phần mở rộng PECL APD và sử dụng giống như apd_callstack(), mà (trích dẫn ví dụ)
// returns an array containing an array of arrays.
Each array appears to contain:
[0] = function name
[1] = filename that contains function
[2] = *calling* line number in *calling* file
[3] = An array which is usually empty
Nhưng kể từ đây là một phần mở rộng PECL và có thể can thiệp vào Trình tối ưu hóa Zend, bạn có thể nên sử dụng debug_backtrace().
Bạn có thể vượt qua các tên tập tin như một tham số:
function sthing($filename) {
echo __FILE__; // echoes myself
echo $filename; // echoes the file that called me
}
Khi bạn gọi hàm bạn vượt qua sự kỳ diệu liên tục FILE:
sthing(__FILE__);
Hãy thử điều này:
$key = array_search(__FUNCTION__, array_column(debug_backtrace(), 'function')));
var_dump(debug_backtrace()[$key]['file']);
Hoàn thiện. Hoạt động như mong đợi. – Dovy
Làm việc tốt trên php 5.6. Cảm ơn. –
Bạn có thể vui lòng cung cấp thêm thông tin về lý do tại sao và với mục đích nào bạn cần có chức năng như vậy y? Có thể là bạn đang tiếp cận một vấn đề từ kết thúc sai. – Gordon