Forum Webscript.Ru

Программирование => PHP => Тема начата: Tronyx от 02 Декабря 2002, 12:58:46

Название: [!] Проверка логического выражения
Отправлено: Tronyx от 02 Декабря 2002, 12:58:46
Кто нибудь подскажет как лучше организовать проверку логического выражения составленого по правилам PHP??? То что у меня сейчас есть проверкой назвать очень сложно...:(
Название: [!] Проверка логического выражения
Отправлено: ThE0ReTiC от 02 Декабря 2002, 13:00:56
Чего?
И чего у тебя сейчас?
Что значит по правилам РНР?
А это сильно отличается от правил формальной логики?
Название: [!] Проверка логического выражения
Отправлено: Oak от 02 Декабря 2002, 14:02:35
eval ?
Название: [!] Проверка логического выражения
Отправлено: Tronyx от 02 Декабря 2002, 15:00:07
Прошу прошения! Ужасно сформулировал вопрос.
Есть строка, например: "($var1 < 0 or $var2 > 1000 ) && sizeof($array) != 0"
Надо проверить является ли она синтаксически верной с точки зрения PHP. И если там есть синтаксические ошибки то хотябы примерно указать на них.
Какие будут мнения?
Название: [!] Проверка логического выражения
Отправлено: Oak от 02 Декабря 2002, 16:04:33
RTFM eval :)

[off]
поскольку вопрос ! - то я не вдаюсь в подробности
[/off]
Название: [!] Проверка логического выражения
Отправлено: Tronyx от 02 Декабря 2002, 16:38:38
Вот есть один вариант:

$str="Логическое выражение";
ob_start();
eval("if(".$str.") echo \'Ok\'; ");
$ob=ob_get_contents();
ob_end_clean();

// Дальше парсим переменную $ob

Спасибо Oak, я думал что warning в коде eval`a остановит выполнение самого скрипта, оказывается что нет.;)
Как вариант можно было парсить логическое выражение самому, по символьно, но это ТАКОЙ ГЕМОРРОЙ...
Название: [!] Проверка логического выражения
Отправлено: Tronyx от 02 Декабря 2002, 16:44:02
Цитировать
RTFM eval
[OFF]Oak я знаю что это за функция. И изначально даже хотел воспользоваться ей, но меня напугали возможные "не нужные" сообщения об ошибках (например "Undefined varible"), не додумав этот вариант я "отложил его в сторону".[/OFF]
Название: [!] Проверка логического выражения
Отправлено: AlieN от 02 Декабря 2002, 16:59:02
Tronyx
А ты перед eval "@" поставь
Название: [!] Проверка логического выражения
Отправлено: Oak от 02 Декабря 2002, 17:26:37
Ага  + там можно перенаправить эти сообщения в строковую переменную и выдавать их как тебе хочется.
Т.е то что ты спрашивал

 See - Error Handling

:)
Название: [!] Проверка логического выражения
Отправлено: Tronyx от 02 Декабря 2002, 18:14:32
Цитировать
А ты перед eval "@" поставь

Не подходит под условие задачи:;)
Цитировать
И если там есть синтаксические ошибки то хотябы примерно указать на них.


Цитировать
See - Error Handling

Тоже не подходит... я пишу компилятор шаблонов, он будет распространятся бесплатно, следовательно расчитан на массы, а у многих обработчик ошибок уже определён и переопределять его на свой нельзя. Тем более не чего трудного нет в вырезании текста ошибки из переменной. :)
Название: [!] Проверка логического выражения
Отправлено: AlieN от 02 Декабря 2002, 19:02:08
Цитировать
переопределять его на свой нельзя

ээээ.....

Цитировать
(PHP 4 >= 4.0.1)

set_error_handler --  Sets a user-defined error handler function.
Название: [!] Проверка логического выражения
Отправлено: Oak от 02 Декабря 2002, 19:38:11
track_errors  boolean

    If enabled, the last error message will always be present in the global variable $php_errormsg.
Название: [!] Проверка логического выражения
Отправлено: Tronyx от 02 Декабря 2002, 20:33:38
Цитировать
track_errors boolean

Спасибо за помощь, но меня вполне устраивает ob_*(); для перехвата ошибок.
Название: [!] Проверка логического выражения
Отправлено: AlieN от 03 Декабря 2002, 12:52:33
Tronyx
Как смысл обрабатывать ошибки 2 раза:
1)пихание в буфер
2)обрабатывать этот буфер какой-нить регуляркой
Если set_error_handler делает все одним скопом