Podręcznik PHP
Poprzedni |  | Następny

# CLVI. 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 predefinopwane

When the extension has either been compiled into PHP or dynamically loaded at runtime, the tokens listed in Dodatek Q are defined as constants.

# 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->isText | Początek rozdziału | token_get_all