Минимальный пример кода:
<?php
$avarname = 'a var value';
function a_function_name($a_parameter = true)
{
// a comment
}
a_function_name();
Структура с использованием token_get_all ():
T_OPEN_TAG: <?php
T_WHITESPACE:
T_VARIABLE: $avarname
T_WHITESPACE:
T_WHITESPACE:
T_CONSTANT_ENCAPSED_STRING: 'a var value'
T_WHITESPACE:
T_FUNCTION: function
T_WHITESPACE:
T_STRING: a_function_name
T_VARIABLE: $a_parameter
T_WHITESPACE:
T_WHITESPACE:
T_STRING: true
T_WHITESPACE:
T_WHITESPACE:
T_COMMENT: // a comment
T_WHITESPACE:
T_WHITESPACE:
T_STRING: a_function_name
T_WHITESPACE:
Как видите, можно определить функцию определение , проверив T_STRING , которому предшествует T_WHITESPACE , которому предшествует T_FUNCTION . Пока все хорошо.
Однако , функция , вызов - это всего лишь T_STRING , как и многие другие вещи, такие как «истинная» константа для параметра, без специального символа ни до, ни после него.
Как я узнаю, что T_STRING относится к имени функции или к чему-то еще, когда перед ним нет символа, сообщающего моему интерпретатору, на что должен ссылаться следующий T_STRING ?
Если ваш ответ будет таким, что мне нужно проверить, существует ли функция с именем значения T_STRING, означает ли это, что не может быть функции с именем true ()? Так как это будет противоречить «истинной» константе? Если мне нужно сделать такую проверку, это усложняет ситуацию по-разному ...