Почему in_array возвращает false с Object :: Class в качестве ключа? - PullRequest
0 голосов
/ 14 апреля 2020

Это странно, и я не могу понять, почему.

У меня есть этот массив:

$exludedAction = [UserController::class => [
            "login", "register"
    ]
];

Когда я проверяю, является ли ключ in_array, он возвращает false:

$type = get_class($userControllerObject);
$cl = in_array($type, $exludedAction); // is false

Я проверяю для строгого сравнения: $c = $type === UserController::class; // returns true

Обратите внимание, что UserController::class находится внутри пространства имен: App\namespace\class.

А также проверка с isset возвращает true: isset($exludedAction[$type]); // returns true

1 Ответ

3 голосов
/ 14 апреля 2020

in_array ищет в массиве значения , а не keys . Вы должны использовать array_key_exists вместо:

$exludedAction = [UserController::class => [
            "login", "register"
    ]
];


$type = get_class($userControllerObject);
$cl = array_key_exists($type, $exludedAction);

var_dump($cl);

Вывод:

bool(true)

Демонстрация на 3v4l.org

...