Как убрать некорректную ошибку php?
Код работает, но php выдает ошибку..
Как ее убрать без применения error_reporting
Текст ошибки:
Cannot assign bool to property main\Language::$lang_layout of type array
Код класса:
class Language
{
public static array $lang_layout = [];
public static array $lang_view = [];
public static function load($code, $view)
{
$lang_layout = APP . "/language/{$code}.php";
$lang_view = APP . "/language/{$code}/{$view['controller']}/{$view['action']}.php";
if(file_exists($lang_layout)){
self::$lang_layout = require_once $lang_layout;/////РУГАЕТСЯ на эту строку
}
if(file_exists($lang_view)){
self::$lang_view = require_once $lang_view;
}
self::$lang_data = array_merge(self::$lang_layout, self::$lang_view);// ТУТ НОРМАЛЬНО ПОЛУЧАЮ ОБА МАССИВА ВМЕСТЕ
}
}
Вот файл который подгружается динамически APP."/language/{$code}.php";
Второй такой же только на другом языке, их всего два возвращают массив
<?php
return [
'tpl_search' => 'Поиск',
'tpl_login' => 'авторизация',
'tpl_signup' => 'регистрация',
];
Ответы (1 шт):
С чего вы взяли что ошибка некорректная?
Там все по делу написано
Cannot assign bool to property main\Language::$lang_layout of type array
Тут написано, что Вы пытаетесь сохранить в свойство $lang_layout класса main\Language булево значение, несмотря на то,что данное поле содержит массив.
И тут все соответствует действительности.
Строка
require_once $lang_layout;
возвращает вам булево значение, потому что вы данный файл уже где-то подключали и вы пытаетесь это сохранить в $lang_layout в котором хранится массив.
Возвращает он вам булево значение а не результат подключения указанного вами файла потому что вы используете не require, а require_once, который будет вам возвращать true если вы уже подключали этот файл.
Поэтому в этом случае вам стоит заменитьrequire_once на require
class Language
{
public static array $lang_layout = [];
public static array $lang_view = [];
public static function load($code, $view)
{
$lang_layout = APP . "/language/{$code}.php";
$lang_view = APP . "/language/{$code}/{$view['controller']}/{$view['action']}.php";
if(file_exists($lang_layout)){
self::$lang_layout = require $lang_layout;
}
if(file_exists($lang_view)){
self::$lang_view = require $lang_view;
}
self::$lang_data = array_merge(self::$lang_layout, self::$lang_view);// ТУТ НОРМАЛЬНО ПОЛУЧАЮ ОБА МАССИВА ВМЕСТЕ
}
}