Используйте класс выражения, если вы хотите оценить математические или логические выражения из ненадежных источников. Вы можете определить свои собственные переменные и функции, которые хранятся в объекте.
*
/
-
+
%
, ^
и **
&&
, ||
, и !
>
<
==
!=
<=
>=
===
и !==
pi
и e
=~
>>
<<
composer require jcubic/expression
<?
require_once ( __DIR__ . " /vendor/autoload.php " );
use jcubic Expression ;
$ e = new Expression ();
// basic evaluation:
$ result = $ e -> evaluate ( ' 2+2 ' );
// supports: order of operation; parentheses; negation; built-in functions
$ result = $ e -> evaluate ( ' -8(5/2)^2*(1-sqrt(4))-8 ' );
// support of booleans
$ result = $ e -> evaluate ( ' 10 < 20 || 20 > 30 && 10 == 10 ' );
// support for strings and match (regexes can be like in php or like in javascript)
$ result = $ e -> evaluate ( ' "Foo,Bar" =~ /^([fo]+),(bar)$/i ' );
// previous call will create $0 for whole match match and $1,$2 for groups
$ result = $ e -> evaluate ( ' $2 ' );
// create your own variables
$ e -> evaluate ( ' a = e^(ln(pi)) ' );
// or functions
$ e -> evaluate ( ' f(x,y) = x^2 + y^2 - 2x*y + 1 ' );
// and then use them
$ result = $ e -> evaluate ( ' 3*f(42,a) ' );
// create external functions
$ e -> functions [ ' foo ' ] = function () {
return " foo " ;
};
// and use them
$ result = $ e -> evaluate ( ' foo() ' );
$e->evalute($expr)
Оценивает выражение и возвращает результат. Если возникает ошибка, печатает предупреждение и возвращает false. Если $ expr является назначением функции, возвращает True при успехе.
$e->e($expr)
Синоним $ e-> evaluate ().
$e->vars()
Возвращает ассоциативный массив всех пользовательских переменных и значений.
$e->funcs()
Возвращает массив всех пользовательских функций.
$e->suppress_errors
Установить на то, чтобы отключить предупреждения при оценке выражений
$e->last_error
Если последняя оценка не удалась, содержит строку, описывающую ошибку. (Полезно при включении Pustress_errors).
$e->functions
Assoc Marray, который содержит функции, определенные внешне.
$e->variables
Assoc Marray, который содержит переменные, определенные пользователем и внешне.
Этот проект начался как вилка. Оригинальный код был создан Майлзом Кауфманном и опубликован на phpclasses.org. Я добавил много функций и исправлений ошибок в исходный код, но затем решил, что код действительно сложно изменить, чтобы добавить новые функции и исправить ошибки. Поэтому я решаю переписать все с нуля, используя генератор PEG Parser.
Оригинальный код по -прежнему доступен в качестве версии 1.0 на Packagist и исходного кода, который вы можете найти в Legacy Branch.
Copyright (C) 2024 Jakub T. Jankiewicz
Выпущен по лицензии MIT