Содержимое файла canChangeStatus.php:
<?php
return array (
1 => [1,1,1,1,1,1,1,1,1],
2 => [0,1,1,1,1,1,1,0,1],
3 => [0,0,0,1,1,1,1,0,0],
4 => [0,0,0,1,1,1,1,0,0],
);
Подключаю файл и вывожу $can
:
$can = include_once ROOT.'/config/canChangeStatus.php';
var_dump($can);
// bool(true)
Почему тогда работает данная конструкция:
var_dump( $can[$userRights][$new-1]) //int(1) или int(0)
UPD Метод:
public static function checkCanUserChangeСurrentOnSelected ( int $userRights, int $new ) {
$can = include_once ROOT.'/config/canChangeStatus.php';
echo "Вызов метода checkCanUserChangeСurrentOnSelected <br>";
var_dump($can);
# Разрешено ли пользователю с данными правами поменять текущий статус на выбранный ( 1 = разрешено )
# -1 т.к. отсчёт массива начинается с нуля
if ( $can[$userRights][$new-1] === 0 ) throw new Exception(' К сожалению, вы не можете изменить текущий статус на выбранный! 11');
return true;
}
Вызов:
# Может ли сотрудник с данными ему правами менять текущий статус на выбранный
self::checkCanUserChangeСurrentOnSelected ( $userGroup, $authorizations['statusId'] );
Вывод:
Вызов метода checkCanUserChangeСurrentOnSelected
<br>
bool(true)
Версия PHP 7.2.
include
ведёт себя так:
include returns FALSE on failure and raises a warning. Successful includes, unless overridden by the included file, return 1. It is possible to execute a return statement inside an included file in order to terminate processing in that file and return to the script which called it. Also, it's possible to return values from included files. You can take the value of the include call as you would for a normal function.
В дополнение к этому у вас используется include_once
:
This is a behavior similar to the include statement, with the only difference being that if the code from a file has already been included, it will not be included again, and include_once returns TRUE.
В вольном переводе картина следующая:
FALSE
и WARNING
при ошибкеinclude_once
вернёт TRUE
если файл уже был подключен ранее. Это полностью объясняет наблюдаемое вами поведение. В текущем виде ваша функция checkCanUserChangeСurrentOnSelected
может работать максимум один раз.return
выражения, если такое было встречено на уровне файла (как canChangeStatus.php
в вопросе)1
если файл обработан, но return
выражения не былоrequire
и include
вернут то, что вернёт скрипт, который они подключают. Но обратите внимание на _once
. Это другая функция (хотя и очень похожая).
Скорее всего вы уже подключали свой скрипт раньше.
return.php:
<?php
return 'Hello';
main.php:
<?php
$foo = include_once __DIR__ . '/return.php';
var_dump($foo); // 'Hello'
$bar = include_once __DIR__ . '/return.php';
var_dump($bar); // true
Для скриптов, которые возвращают значение используйте require
или include
без _once
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Посылаю в функцию массив, для дальнейшей обработкиВ этом массиве есть вложенные массивы
Стандартно в Opencart для выбора опций товара установлены переключатели, флажки, датаКак добавить к ним ползунок?
Возникла проблема с работой формул в PHPExcelФормулы записываются в значения ячейки, но чтобы вывело результат работы формулы, нужно нажать...