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