Wyobraźmy mam następującą sytuację:Uzyskaj linię kodu i plik, który uruchamia bieżącą funkcję w PHP?
File1.php
<?php
include("Function.php");
log("test");
?>
Function.php
<?php
function log($msg)
{
echo "";
}
?>
Chcę zmienić funkcję dziennika tak, że będzie produkować co następuje:
test (plik: File1.php, numer linii: 3)
W jaki sposób uzyskać nazwę pliku i numer wiersza kodu, który wykonywał bieżącą funkcję w PHP?
EDIT komentarze użytkowania zaległości: Gdy używam zaległości w moim Object Oriented sposobem programowania mam następującą sytuację.
index.php
<?php
include("Logger.static.php");
include("TestClass.class.php");
new TestClass();
?>
TestClass.class.php
<?php
class TestClass
{
function __construct()
{
Logger::log("this is a test log message");
}
}
?>
Logger.static.php
<?php
class Logger
{
static public function log($msg)
{
$bt = debug_backtrace();
$caller = array_shift($bt);
echo $caller['file'];
echo $caller['line'];
}
}
?>
Przykład powróci w pliku "index.php" i jako numer linii 4, jest to miejsce, w którym klasa jest inicjowana. Jednak ma on zwrócić plik TestClass.class.php i numer linii 6. Dowolny pomysł, jak to naprawić?
W rzeczywistości jest problem. Koduję w sposób zorientowany obiektowo i zwracam linię oraz skrypt wywołujący obiekt, w którym wywoływana jest funkcja. Zamiast tego powinien podać nazwę dołączonej klasy i linii w tym pliku klasy. Dowolny pomysł? – Tom
Musisz być dokładniejszy tutaj. Czy możesz pokazać mi, co otrzymujesz i czego oczekujesz? –
Witaj Lior Cohen, czy możesz sprawdzić mój zredagowany oryginalny post? Dokładnie to wyjaśniłem. Dzięki! – Tom