Форум программистов, компьютерный форум, киберфорум
elnorbert
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Реализация безопасного логического И, ИЛИ, в языке PHP; проверено на PHP 5.3.18

Запись от elnorbert размещена 25.08.2019 в 17:57
Показов 2094 Комментарии 0

Реализация безопасного логического И, ИЛИ, в языке PHP; проверено на PHP 5.3.18

автор реализации способа безопасной логики не берет на себя ответственность за возможное не корректное функционирование применяемое в коде!

В соответствии с документацией по PHP, сборки 2018-10-01, говорится:

Руководство по PHP > Справочник языка > Операторы > Логические операторы:

Пример #1 Объяснение логических операторов

PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
 
// --------------------
// foo() никогда не будет вызвана, т.к. эти операторы являются шунтирующими (short-circuit)
 
$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());
 
//...
, более этого:

Руководство по PHP > Справочник языка > Операторы > Приоритет оператора:

Приоритет и ассоциативность оператора определяет только то, как группируется выражение, а не порядок его вычисления. Обычно PHP не указывает, в каком порядке вычисляются выражения и кода, который предполагает специфичный порядок вычисления следует избегать, потому, что поведение может меняться в разных версиях PHP или в зависимости от окружающего кода.
Пример #2 Неопределенный порядок вычисления

PHP
1
2
3
4
5
<?php
$a = 1;
echo $a + $a++; // может вывести как 2 так и 3
 
//...
, что определяет применение операторов AND, OR, &&, ||, в двойне опаснее, в коде сценария интерпретатора.

Попытка автора реализовать способ не шунтирующего логического оператора И, ИЛИ, совместно с вычислением аргументов строго с лева на право, реализовалась функциями:

PHP
1
2
FUNCTION __PHP_SAFE_AND($LE, $RE) { RETURN $LE AND $RE; } /* { RETURN $LE && $RE; } */
FUNCTION __PHP_SAFE_OR($LE, $RE) { RETURN $LE OR $RE; } /* { RETURN $LE || $RE; } */
Все функции содержат префикс, двойное нижнее подчеркивание, двойной underscore-префикс, по причине очень близкой принадлежности решаемой задачи к синтаксису языка, и для минимизации вероятности совпадения имен.

Весь модуль, включая имена функций, собран прописными буквами, по причине специфичности решаемой задачи.

$LE, $RE, обозначают левое и правое выражение, соответственно.

Проверка в интерпретаторе версии PHP 5.3.18

Code
1
php --version
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
require('__php_safe_logic.php');
 
function fle($le) {
    echo '< ';
    return $le;
}
 
function fre($re) {
    echo '> ';
    return $re;
}
 
__PHP_SAFE_AND(fle(false), fre(false));
__PHP_SAFE_OR(fle(true), fre(true));
 
echo "\n";
 
fle(false) and fre(false);
fle(true) or fre(true);
Результат:

Code
1
2
< > < > 
< <
, что доказывает корректность реализации задачи, для PHP 5.3.18

Почему применение шунтирующего логического оператора может быть очень опасно? Потому что пропуск вычисления второго выражения, в обработке которого, уставший программист полностью уверен, не активирует интерфейс который мог содержатся во втором выражении.

Если второе выражение шунтирующего логического оператора не содержит интерфейсов, ВОЗМОЖНО применение шунтирующего логического оператора полностью безопасно.

Внимательно следует пользоваться шунтирующими логическими операторами в случае применения много поточности, если много поточность можно реализовать в PHP.

Возможно где-то ошибаюсь...

25.08.2019
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru