Intereting Posts
Laravel 5.5 Ошибка Базовая таблица или представление уже существуют: 1050 Таблица «пользователи» уже существуют Создание SOAP-вызова с использованием PHP с телом XML Обработка элементов в шаблоне сбора с помощью блока отображения данных почему mysql_fetch_array () ожидает, что параметр 1 будет ресурсом? почему ресурс не является параметром 1? FTP-сервер PHP не работает над экземпляром EC2 Amazon Linux? phpbb 3.1 передача переменной между 2 страницами Пользовательский created_at и использовать только custom created_at PHP – Как избежать ошибок Parse на старых серверах при использовании новых функций Скопируйте изображение буфера обмена на веб-страницу с помощью JQuery Использование HTTPS-ссылки с php-методами (file_get_contents, getimagesize) Laravel logical – конвертировать цену, поэтому на frontend у меня всегда значение chf Загрузка файла в Codeigniter Преобразование специальных символов с помощью htmlspecialchars и htmlentities Как удалить верхнюю строку в CSV-файле (заголовки coloumn)? CodeIgniter – $ this-> uri-> segment () возвращает пустое

Функция вызова в массиве (PHP)

В процессе построения массива я пытаюсь вызвать функцию checkIfNodeExists () . PHP выполняет эту функцию и дает мне ожидаемый результат, но он все равно дает мне «Уведомление», и я не хочу никаких ошибок в моем коде.

function checkIfNodeExists($input) { if (isset($input)) { return (string) $input; } else { return 'null'; } } $array['sections'][] = array ( 'ident' => $section->attributes()->ident, 'title' => $section->attributes()->title, 'objective' => checkIfNodeExists($section->objectives->material->mattext) ); 

Примечание. Попытка получить свойство не-объекта в /var/www/OLAT_Connection/QTI-XML-Parser.php в строке xx

Теперь, если я проверю, существует ли «объективный» ВНЕШНИЙ массив, PHP не дает мне уведомления. Но это приводит к большему количеству строк кода, потому что мне приходится работать с дополнительными переменными и более IF-структурами и так далее …

Есть ли другая возможность, не добавляя слишком много строк дополнительного кода?

Кажется, что $section->objectives->material->mattext не определен правильно. Я бы начал искать там, чтобы увидеть, есть ли у вас ошибки в инициализации объекта.

Было бы лучше, если бы вы разместили больше кода, чтобы мы могли видеть, что именно происходит в этом скрипте.

Для решения может потребоваться больше кода (хотя и маловероятно в этом случае), это отнюдь не плохо. Меньше кода не обязательно лучше или эффективнее! Очевидно, само собой разумеется, что меньшее количество строк кода (в большинстве случаев) выполняется быстрее, но это не делает его более безопасным или эффективным

ОБНОВИТЬ

Вы можете просто сделать это вместо вызова другой функции:

 'objective' => isset($section->objectives->material->mattext) ? (string)$section->objectives->material->mattext : null 

Я не тестировал это и не могу вспомнить, можете ли вы устанавливать условные операторы inline, поэтому не можете быть уверены, будет ли это работать, но если это произойдет, это будет более эффективно, и это будет меньше кода!

Проблема в том, что когда вы вызываете checkIfNodeExists вы отправляете ему значение, и отправляя ему значение, вы также выполняете значение. Поэтому isset() будет работать над результатом выражения $section->objectives->material->mattext а не с самим выражением .

Это будет работать:

 $array['sections'][] = array ( 'ident' => $section->attributes()->ident, 'title' => $section->attributes()->title, 'objective' => isset($section->objectives->material->mattext) ? (string)$section->objectives->material->mattext : 'null' ); 

если вы добавите «@», когда вы вызываете функцию, ошибка не отображается

  function checkIfNodeExists($input) { if (isset($input)) { return (string) $input; } else { return 'null'; } } $array['sections'][] = array ( 'ident' => $section->attributes()->ident, 'title' => $section->attributes()->title, 'objective' => @checkIfNodeExists($section->objectives->material->mattext) ); 

Определить $ section-> target-> material-> mattext