Dwie przydatne funkcje

Dzisiejszy post będzie o dwóch przydatnych funkcjach, których dość nagminnie używam. Nie widziałem ich jeszcze nigdzie w internecie za bardzo więc stwierdziłem, że podzielę się nimi z publiką, a nuż się komuś przydadzą.

Pierwsza funkcja jest pewnym ulepszeniem var_dump. Pewnie nie raz się Wam zdarzyło, że zostawiliście gdzieś samotnego var_dumpa w kodzie i nie mogliście dość do tego gdzie on się podziewa.

Ta funkcja przy wywołaniu podaje nazwę pliku i linie w której została wywołana, jest to podawane nad dumpem. Z innych ekstrasów dołącza ona formatowanie dumpowanej zmiennej (ta funkcjonalność ma już Zend_Debug), więc wynik jest bardziej czytelny. A więc Pani i Panowie oto ona wraz z przykładem:

function dump() {
    $aTrace = debug_backtrace(false);
    $aArgs = func_get_args();
    echo '<code style="white-space: pre;">';
    echo "Line {$aTrace[0]['line']} \n";
    echo "File {$aTrace[0]['file']} \n";
    call_user_func_array('var_dump',$aArgs);
    echo "</code>";
}
dump('test');

/*wynik
Line 4
File D:\www\projekt\index.php
string(4) "test"
*/

Natomiast druga funkcja jaką chciałem przedstawić, to funkcja zamieniająca polskie znaki diakrytyczne na ich odpowiedniki bez ogonków – przydatna przy tworzeniu przyjaznych url-i.

function ascii_encode($input, $encoding = 'utf-8'){
$sResult = iconv($encoding,'ascii//translit', $input);
$aSearch = array(',',"'");
$sResult = str_replace($aSearch, '', $sResult);
return $sResult;
}

if(PHP_OS === 'WINNT'){
    setlocale(LC_ALL,'polish');
} else {
    setlocale(LC_ALL,'pl_PL.utf8');
}

echo ascii_encode('zażółć gęślą jaźń');
//wynik: zazolc gesla jazn

Bardzo ważną rzeczą w przypadku funkcji ascii_encode jest wcześniejsze wywołanie setlocale, inaczej konwersja nie przebiegnie pomyślnie, co więcej jak zauważyliście inaczej ustawia się locale dla windowsa a inaczej dla całej reszty.

  1. matipl pisze:

    Poleciłbym zainstalowanie xdebug + odpowiednia konfiguracja php.ini 😉 A nie tworzenie własnych wynalazków.

  2. Tuner pisze:

    Xdebug nie ma tu nic do rzeczy. Debug_backtrace świetnie nadaje się do logowania błędów z ładną i bogatą ścieżką, można nawet zunifikować zapis loga błędu i wyjątku. Swego czasu ta funkcja mógł być także sposobem na implementację LSB w PHP. Jeszcze inne sprawa, że znam kilka przypadków, gdy ta funkcja przydała się developerom, np. do zmiany zachowania metod zależnie od kontekstu wywołania.

  3. Wojciech Soczyński pisze:

    Znam xdebug i go używam, jednak nie zawsze mamy do niego dostęp, np gdy coś się posypie na serwerze nad którym nie mamy kontroli, co więcej xdebugowy var_dump nie podaje nam ściężki ani lini pliku w którym został wywołany. Można oczywiście włączyć profilowanie i w CacheGrindzie szukać miejsca wywołania ale po co, jak mamy taką ładną krótką funkcje ;).

  1. There are no trackbacks for this post yet.

Leave a Reply

Informuj mnie o odpowiedziach poprzez e-mail. Możesz również subskrybować wpis bez zostawiania komentarza.