Случается, когда вы пытаетесь получить доступ к объекту объекта, пока нет объекта.
Типичный пример для non-object notice будет
$users = json_decode('[{"name": "hakre"}]');
echo $users->name; # Notice: Trying to get property of non-object
В этом случае $users
представляет собой массив (а не объект), и он не имеет никаких свойств.
Это похоже для доступа к несуществующему индексу или ключу массива (см. Примечание: Undefined Index ).
Этот пример значительно упрощен. Чаще всего такое уведомление сигнализирует неконтролируемое возвращаемое значение, например. когда библиотека возвращает NULL
, если объект не существует или просто неожиданное значение, отличное от объекта (например, в результате Xpath, структуры JSON с непредвиденным форматом, XML с неожиданным форматом и т. д.), но код не проверяет такой условие.
Поскольку эти не-объекты часто обрабатываются дальше, часто возникает фатальная ошибка при вызове метода объекта для не-объекта (см.: Неустранимая ошибка: вызов члену function ... на не-объекте ), останавливая скрипт.
Его можно легко предотвратить, проверив условия ошибки и / или переменную, соответствующую ожиданию. Здесь такое уведомление с примером DOMXPath:
$result = $xpath->query("//*[@id='detail-sections']/div[1]");
$divText = $result->item(0)->nodeValue; # Notice: Trying to get property of non-object
Проблема заключается в доступе к свойству nodeValue
первого поля, пока он не был проверен, существует ли он или нет в $result
коллекция. Вместо этого он платит, чтобы сделать код более явным, назначив переменные объектам, на которых работает код:
$result = $xpath->query("//*[@id='detail-sections']/div[1]");
$div = $result->item(0);
$divText = "-/-";
if ($div) {
$divText = $div->nodeValue;
}
echo $divText;
Связанные ошибки:
Я также хотел бы смочь добавить физические папки к решению, но к сожалению Вы не можете сделать так вне проекта.
лучшее решение, которое я нашел, состоит в том, чтобы добавить папку решения с тем же именем как физическая папка (myFolder в Вашем примере), затем добавить файлы от той физической папки до папки решения.
Однако Visual Studio не поддерживает отображение между папкой решения и физической папкой, что означает что:
новые файлы, впоследствии созданные в папке решения с помощью Visual Studio, автоматически не помещаются в физическую подпапку (я думаю, что они создаются в корневой папке решения по умолчанию)
, файлы, добавленные к физической папке, не автоматически видимы в папке решения, даже с "Шоу Все Файлы".
Для добавления новых файлов я поэтому всегда создаю новый файл в физической папке вне Visual Studio, затем добавляю его к использованию папки решения, "Добавьте/Существующими Объект"
Что я сделал, исторически должен создать проект для того, чтобы просто содержать файлы (DLLs, и т.д.)
можно сделать это также. Этот проект можно назвать как любая папка, которую Вы пытаетесь создать.
Можно также добавить автономные файлы в папке решения, и они будут управляться источником. Но будьте осторожны, что VS имеет тенденцию помещать эти файлы в ту же папку как файл решения - "Папки Решения" являются виртуальными и не соответствуют реальным папкам файловой системы. Чтобы иметь реальную файловую систему папки, я думаю, что необходимо было бы создать структуру сами и затем выбрать "Add Existing Item".
Можно использовать папку решения для группировки файлов в решении, но папка решения не представляет дисковую папку, как ее логотип предлагает. (Это может содержать ссылки на файл и ссылки проекта.)