Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nazwa pliku oraz numer linii wywołania funckji.
Forum PHP.pl > Forum > PHP
pszpiler
Przykładowa sytuacja wygląda tak:

Mam plik functions.php, a w nim zbiór jakiś tam funckji.
  1. function doSomething($param) {
  2. //...
  3. }

Mam też inny plik np index.php, który korzysta z funkcji zawartych w pliku functions.php
  1. require_once 'functions.php';
  2. echo doSomething($param);

I teraz moje pytanie: Czy wewnątrz definicji funkcji doSomething() da się ustalić nazwę skryptu (w tym wypadku z index.php) oraz numer linii w skrypcie z którego została wywołana (w tym wypadku numer linii również w skrypcie index.php)?

Są odpowiednie specjalne stałe
  1. __FILE__
  2. oraz
  3. __LINE__

ale zastosowanie ich wewnątrz definicji funckji doSomething() w taki sposób:
  1. function doSomething($param) {
  2. //...
  3. echo __FILE__;
  4. echo __LINE__;
  5. }

zwróci nazwę skryptu functions.php oraz linię wywołania stałej __LINE__ również wewnątrz skryptu functions.php.

Można oczywiście jakoś przekazać nazwę skryptu i miejsce wywołania:

index.php:
  1. echo doSomething($param, __FILE__, __LINE__);

functions.php:
  1. function doSomething($param, $file, $line) {
  2. //...
  3. echo $file;
  4. echo $line;
  5. }

ale dla zachowania elegancji rozwiązania chciałbym tego uniknąć.

Do czego to potrzebne? Otóż jeśli aplikacja jest duża i jeśli podczas wykonywania funkcji powstaną jakieś błędy to wewnątrz funkcji można byłoby wyświetlać komunikat o miejscu jej wywołania w celu łatwiejszego odnalezienia i usunięcia błędu.

darko
Wszystko fajnie, tylko że miejsce wywołania danej funkcji nie jest i nie będzie faktycznym miejscem wystąpienia błędu. Po co sobie utrudniać w ten sposób życie i mylnie kierować do miejsca wywołania, skoro i tak miejscem docelowym powinno być miejsce, w którym wystąpił błąd?
pszpiler
Cytat(darko @ 6.04.2010, 00:24:54 ) *
Wszystko fajnie, tylko że miejsce wywołania danej funkcji nie jest i nie będzie faktycznym miejscem wystąpienia błędu. Po co sobie utrudniać w ten sposób życie i mylnie kierować do miejsca wywołania, skoro i tak miejscem docelowym powinno być miejsce, w którym wystąpił błąd?

Nie do końca to jest prawdą - miejsce wywołania funkcji jest i może być przydatne. Przykład:

Jeśli funkcja, która coś robi przyjmuje jako parametr wcześniej skonstruowane zapytanie SQL i wykonuje to zapytanie to potrzebowałbym informacji o tym gdzie została wywołana ta funkcja. Raczej nie potrzebuje informacji, o miejscu powstania błędu (w tym wypadku skrypt i linia wywołania funkcji np. mysql_query()) bo to miejsce będzie wciąż to samo dla wszystkich błędnie skonstruowanych zapytań SQL.

Jakieś propozycje na rozwiązanie problemu?
darko
Cytat(pszpiler @ 6.04.2010, 00:48:55 ) *
Nie do końca to jest prawdą - miejsce wywołania funkcji jest i może być przydatne. Przykład:

Jeśli funkcja, która coś robi przyjmuje jako parametr wcześniej skonstruowane zapytanie SQL i wykonuje to zapytanie to potrzebowałbym informacji o tym gdzie została wywołana ta funkcja. Raczej nie potrzebuje informacji, o miejscu powstania błędu (w tym wypadku skrypt i linia wywołania funkcji np. mysql_query()) bo to miejsce będzie wciąż to samo dla wszystkich błędnie skonstruowanych zapytań SQL.

Jakieś propozycje na rozwiązanie problemu?

Hmm zerknij
debug_print_backtrace
oraz
debug_backtrace
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.