Podręcznik PHP
Poprzedni |  | Następny

# CLXV. Funkcje Tokenizera

# Wstęp

Funkcje tokenizera są interfejsem dostępu do wewnętrznego tokenizera wbudowanego w silniku Zend. Używając tych funkcji możesz napisać swoje własne narzędzia do analizy lub modyfikacji kodu PHP bez potrzeby zajmowania się specyfikacją języka na poziomie analizy leksykalnej.

Patrz także dodatek o tokenach.

# Wymagania

Do zbudowania tego rozszerzenia nie są wymagane żadne zewnętrzne biblioteki.

# Instalacja

Począwszy od PHP 4.3.0 funkcje te są dostępne domyślnie. Dla starszych wersji musisz skonfigurować i skompilować PHP z opcją `--enable-tokenizer`. Możesz wyłączyć wsparcie tokenizera opcją `--disable-tokenizer`.

`PHP` w wersji dla systemów Windows posiada wbudowaną obsługę dla tego rozszerzenia. Nie trzeba ładować żadnych dodatkowych rozszerzeń aby korzystać z tych funkcji.

> Notatka: Wbudowane wsparcie dla tokenizera dostępne jest od PHP 4.3.0.

# Stałe predefiniowane

Kiedy rozszerzenie zostało skompilowane z PHP lub załadowane dynamicznie, lista tokenów zdefiniowanych jako stałe znajduje się w Dodatek Q.

# Przykłady

Poniżej prosty skrypt PHP używający tokenizera który wczyta plik PHP, usunie wszystkie komentarze ze źródła i wydrukuje tylko czysty kod.

Przykład 1. Usuwanie komentarzy przy pomocy tokenizera

`<?php
/* T_ML_COMMENT nie istnieje w PHP 5.
* Następujące trzy linie definiują tą stała by zachować kompatybilność
* wsteczną.
*
* Kolejne dwie linie definiują istniejącą tylko w PHP 5 stałą
* T_DOC_COMMENT, którą w PHP 4 podmienimy jako T_ML_COMMENT.
*/
if (!defined('T_ML_COMMENT')) {
define('T_ML_COMMENT', T_COMMENT);
} else {
define('T_DOC_COMMENT', T_ML_COMMENT);
}
$kod = file_get_contents("jakisplik.php");
$tokeny = token_get_all($kod);
foreach ($tokeny as $token) {
if (is_string($token)) {
// prosty token jednoznakowy
echo $token;
} else {
// tablica definiująca token
list($id, $tekst) = $token;
switch ($id) {
case T_COMMENT:
case T_ML_COMMENT: // to zdefiniowaliśmy
case T_DOC_COMMENT: // to też
// brak akcji dla komentarzy
break;
default:
// wszystko inne -> drukuj "jakie jest"
echo $tekst;
break;
}
}
}
?>`

Poprzedni | Spis treści | Następny
tidyNode::getParent | Początek rozdziału | token_get_all