当我创建标准类时,我主要做的是:
$test = null;
$test->id = 1;
$test->name = 'name';
然而,在严格模式下,我收到错误。
显然,正确的做法是:
$test = new stdClass();
$test->id = 1;
$test->name = 'name';
所以我想知道:
这是一个很大的禁忌:$test = null;
做我想做的事吗?
符合严格标准我们获得了什么?它是否确保代码将继续在将来的版本中运行?向后兼容会更好吗?这只是最佳做法的问题吗?还有别的吗?
修改 错字
答案 0 :(得分:11)
这是一个很大的禁忌:$ test = null;做我想做的事情?
是
这是允许的,因为PHP是松散的,但启用严格模式会给你上帝的诚实真相。
符合严格标准我们获得了什么?它做了吗? 确定的代码将继续在未来的版本中工作?它会更好吗? 向后兼容?这只是最佳实践的问题吗?
是
还有别的吗?
正确。
答案 1 :(得分:4)
null
不是对象。你基本上是这样做的:
$test = 'this is not an object';
$test->suddenly_it_is_an_object = true;
......你想知道为什么会收到警告?
答案 2 :(得分:3)
使用此:
$test = null;
您没有明确(对于PHP引擎和将会读取您的代码的人) $test
是一个对象。
因此,作为读者,后来发现$test
被用作对象感觉并不自然 - 这意味着您的代码不太可维护比您明确声明时$test
作为对象。
答案 3 :(得分:1)
这非常糟糕,并且要阅读= null;
符合标准new ...;
答案 4 :(得分:1)
如果你习惯用$test = new stdClass();
正确地声明你的对象,那么看到这个严格模式错误将帮助你捕捉PHP在你不小心输入{{1}时喜欢扔给你的隐式变量声明错误} $usr
等等,为你节省了无意义的麻烦。
答案 5 :(得分:1)
你可以向这样的物体施放东西:
$object = (object) array(
'id' => 5,
'name' => 'Darsstar',
'key' => 'value',
);
但是新的StdClass()仍然是最严格的做法。 虽然我有这种感觉你只希望错误消失,并且可能更喜欢这种语法。