В процессе построения массива я пытаюсь вызвать функцию 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