Значение переменной в качестве условия IF (PHP)

12 3
toxic steel
На сайте с 28.12.2007
Offline
175
1712

Коллеги, можно в PHP как-то подставить значение переменной в качестве условия IF?

То есть:

$a=1;

$x = "$a < 2";

if ( *** ) {

//Сделай что-нибудь

}

Где *** берётся значение $x, в примере = if ($a < 2)

Есть отличные, недорогие рекламные места на агрофоруме (http://farmerforum.ru/viewtopic.php?t=1725)! Клуб истинных ценителей денег (http://coinshunter.ru/).
S
На сайте с 30.09.2016
Offline
469
#1

Непонятный вопрос. Что мешает написать

if ($a < 2){

...

}

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#2

Это изврат, переделывайте логику работы скрипта.

Или вы руками условия пишите?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
[Удален]
#3
toxic steel:
Коллеги, можно в PHP как-то подставить значение переменной в качестве условия IF?

То есть:

$a=1;

$x = "$a < 2";

if ( *** ) {
//Сделай что-нибудь
}


Где *** берётся значение $x, в примере = if ($a < 2)

А я убрал кавычки - и всё заработало.

Действующий пример:

http://prohorov-andrej.ru/node/77

<?

$a=1;

$x = $a < 2;

if ($x==1) {

print "job<br>";

}

$a=3;

print $y = $a < 2;

if ($y!=1) {

print 'nojob';

}

?>

JH
На сайте с 29.06.2013
Offline
48
#4
miltorg:
А я убрал кавычки - и всё заработало.
Действующий пример:
http://prohorov-andrej.ru/node/77

<?
$a=1;

$x = $a < 2;

if ($x==1) {
print "job<br>";
}

$a=3;

print $y = $a < 2;

if ($y!=1) {
print 'nojob';
}

?>

И все же это неправильный подход, зачем вам еще одна переменная X если можно написать if ($a < 2)

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#5
А я убрал кавычки - и всё заработало.

А если не убрать и на входе строка?

toxic steel
На сайте с 28.12.2007
Offline
175
#6
LEOnidUKG:
Или вы руками условия пишите?

Да, практически. Ща попробую сформулировать....

У пользователя есть возможность генерировать собственные шаблонные переменные, которые используются в работе скрипта, делает он это, заполняя форму по шаблону, но с неограниченным количеством полей (можно натыкивать их Ajax-ом до посинения).

В итоге имеем что-то вроде:

%шаблон% = ($переменная_1 > 10 AND $переменная_2 = 'строка' AND ...) ? ...

У нас есть некий объект в базе, у которого масса параметров (условно - товарная карточка, очень близко по смыслу, кстати).

Так вот если $цвет = красный, $цена > 10, $страна производства = 'Турция', то получаем заранее заготовленное значение шаблона. После чего шаблон подставляется в описание товарной карточки, получается читабельное уникальное описание.

Здесь в роли пользователя выступает не некий безымянный абстрактный юзер, а, раз уж это близко по смыслу к товарной карточке - контент-менеджер магазина.

Условий каждый контент-менеджер может нагенерировать сколько ему позволит фантазия, переменных в каждом условии от 1, до N, проще всего их сразу хранить именно в виде строки "$var > 1 && $var = 2 && $var = \'string\'"

Соответственно в базе имеем таблицу:

ID

Юзер_ID

%Шаблон%

Условие

Замена

И на первый взгляд всё круто и удобно...

Если есть идеи как лучше организовать хранение и проверку условий другим способом - буду весьма признателен. Чой-то я не ожидал засады на этом этапе :)

ДП
На сайте с 23.11.2009
Offline
203
#7

У symfony есть компонент Expression Language - https://symfony.com/doc/current/components/expression_language.html он, походе, умеет то. что вам надо.

[Удален]
#8

Если очень нужны ковычки - тогда так:

<?

$a=1;

$x = "$a < 2";

eval ("\$x=$x;");

if ($x) {

print "job<br>";

}

//----------------------------------------------------------

$a=3;

$y = "$a < 2";

eval ("\$y=$y;");

if ($y) {

print 'nojob';

}

?>

http://prohorov-andrej.ru/node/78

Arsh
На сайте с 21.03.2007
Offline
199
#9

miltorg, еще с одинарными забабахай и не забудь ссылку на говносайт.

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#10

Ох уж эта опасная и сладостная магия eval() :D

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий