Код: Выделить всё
var_dump(empty($this->table)); //results in "bool(true)"
Код: Выделить всё
var_dump($this->table); //results in an array of 75 elements
Код: Выделить всё
var_dump(empty($this->table[0])); //results in "bool(false)"
- Мой вопрос НЕ в том, что делать, чтобы мой код работал. Во многих других темах это очень хорошо объясняется, и я не хочу здесь дублирования.
- Мой вопрос НЕ в том, почему PHP имеет здесь ошибку. Поскольку PHP - это то, что он есть, и это его поведение.
- Поскольку !isset() для неложных элементов является эквивалентом на пустой(), в этом случае он, очевидно, дает те же результаты. Я мог бы поменять местами «...пустой($array) результат true...» внутри заголовка на «...почему массив не существует...». Я решил использовать более конкретную формулировку.
Окружающая среда:
- У меня есть метод внутри объекта, который извлекает массив из CSV-файла. (имена изменены)
Код: Выделить всё
$object = new Class(); empty($object->method()); //results in false - as I would expect as an array with 75 elements is returned - Я заключаю это вместе с другими переменными разных типов в массив параметров.
Код: Выделить всё
$params =['table' => $object->method(),...]; empty($params['table']); //still results in false here - Через объект View я передаю массив параметров в представление
Для передачи внутри объекта View я использую магический метод __get
Код: Выделить всё
return (new View('transactions/show',$params))->render();Функция рендеринга включает представление с буферизацией выводаКод: Выделить всё
public function __get(string $name) { return $this->params[$name] ?? null; }Код: Выделить всё
public function render() { ob_start(); include VIEW_PATH . DIRECTORY_SEPARATOR . $this->view . '.php'; return ob_get_clean(); } - Внутри представления («транзакции/шоу») я могу получить доступ к параметрам с помощью переменной $this->и, как упоминалось выше, массив доступен и работает нормально, но результат "истина" для пустой таблицы ($this->table) меня смущает.
Чтобы показать воспроизводимую версию, заполните файлы:Класс контроллера:
Код: Выделить всё
Подробнее здесь: [url]https://stackoverflow.com/questions/79108867/why-does-emptyobject-arrayproperty-result-in-true-while-array-elements-are-s[/url]