Это происходит, когда вы обычно вызываете файл include
, require
или fopen
, и PHP не смог найти файл или не имел достаточного разрешения на загрузку файла.
Это может произойти по разным причинам:
Одна из распространенных ошибок заключается в том, чтобы не использовать абсолютный путь. Это можно легко решить, используя полный путь или магические константы , такие как __DIR__
или dirname(__FILE__)
:
include __DIR__ . '/inc/globals.inc.php';
или:
require dirname(__FILE__) . '/inc/globals.inc.php';
Обеспечение правильного пути используется одним шагом в устранении этих проблем, это также может быть связано с несуществующими файлами, правами файловой системы, предотвращающими доступ или открытыми ограничениями на основе самого PHP.
Лучший способ для быстрого решения этой проблемы необходимо выполнить контрольный список устранения неполадок ниже.
Вопросы, относящиеся:
Связанные ошибки:
Немного более простой путь, чем Ваш метод состоит в том, чтобы использовать JavaScript в операторе
alert('x' in o); // true
alert('x' in t); // false
object.hasOwnProperty (имя) только возвращает true для объектов, которые находятся в том же объекте и лжи для всего остального, включая свойства в прототипе.
function x() {
this.another=undefined;
};
x.prototype.something=1;
x.prototype.nothing=undefined;
y = new x;
y.hasOwnProperty("something"); //false
y.hasOwnProperty("nothing"); //false
y.hasOwnProperty("another"); //true
"someting" in y; //true
"another" in y; //true
Дополнительно единственный путь действительно удаляет свойство, должен использовать, удаляют. Установка его к неопределенному НЕ удаляет его.
надлежащий способ сделать это состоит в том, чтобы использовать в как сказанный roborg.
Обновление: неопределенный примитивное значение, см. раздел ECMAScript Language Specification 4.3.2 и 4.3.9.
Что-то вроде этого?
function isDefined(var){
return (typeof(window[var]) == 'undefined') ? false : true;
}
или..
function isDefined(var){
return (window.var === undefined) ? false : true;
}
Ach, один для антишаблонов распараллеливают там.
undefined
не ключевое слово.
при присвоении записи var foo = undefined;
Вы присваиваете ей значение символа undefined
, который Вы не определили, и следовательно значение, которое Вы получите, "undefined"
. Вы привели бы точно к тому же результату при присвоении его UnDeFiNeD
или NotFineAtAll
или _qwertyuiop
, Почему это настолько ужасно? Далеко от того, что это приводит к ложному пониманию того, что продолжается, что происходит, если Вы, оказывается, загружаете библиотеку или нанимаете dev, кто пишет var undefined = true;
Нет. Я не думаю, что переменная, равная undefined
, должна быть распознана, как "определено".
Установка это равняется undefined
, непосредственно просто ленивый способ удалить его - как соединено к использованию delete
ключевое слово. Я полагаю, что это просто означает, что сборка "мусора" не взяла влияние на переменной/свойстве.
[ РЕДАКТИРОВАНИЕ ]
Относительно Вашего комментария [приблизительно 114] и propertyIsEnumerable
, методы/свойства прототипа не являются ни объектом, собственным ни счетным.
Object.prototype.foo = 'something';
var o = {bar: 'anything'};
o.hasOwnProperty('foo'); //=> false
o.hasOwnProperty('bar'); //=> true
Object.prototype.hasOwnProperty('foo'); //=> true
Один способ сделать это является этим:
var definedProperties = [];
for (var prop in o) definedProperties.push(prop);
if (o.x === undefined && contains(prop, 'x')) {
//x is defined, but set to undefined
}
, где contains
просто проверки, является ли какой-либо элемент в массиве 'x'
. Действительно ли это - единственный путь?
Вы могли попытаться поместить часы на One.x, но это только скажет Вам в то время, когда это становится неопределенным.