Код: Выделить всё
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 я передаю массив параметров в представление
Код: Выделить всё
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();
}
- Внутри представления («transactions/show») я могу получить доступ к параметрам с помощью переменной $this->, как упоминалось выше. массив доступен и работает нормально, но результат «истина» для пустой таблицы ($this->table) меня смущает.
Чтобы показать воспроизводимую версию ниже, полные файлы:
Контроллер класс:
Код: Выделить всё
Подробнее здесь: [url]https://stackoverflow.com/questions/79108867/why-does-emptyobject-arrayproperty-result-in-true-while-array-elements-are-s[/url]