PHP严格标准:这样糟糕吗?

时间:2011-07-21 19:01:44

标签: php stdclass

当我创建标准类时,我主要做的是:

$test = null;
$test->id = 1;
$test->name = 'name';

然而,在严格模式下,我收到错误。

显然,正确的做法是:

$test = new stdClass();
$test->id = 1;
$test->name = 'name';

所以我想知道:

这是一个很大的禁忌:$test = null;做我想做的事吗?

符合严格标准我们获得了什么?它是否确保代码将继续在将来的版本中运行?向后兼容会更好吗?这只是最佳做法的问题吗?还有别的吗?

修改 错字

6 个答案:

答案 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()仍然是最严格的做法。 虽然我有这种感觉你只希望错误消失,并且可能更喜欢这种语法。