5

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

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

但是在严格模式下我得到一个错误。

所以显然正确的做法是:

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

所以我想知道:

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

遵守严格的标准,我们能得到什么?它是否确保代码将在未来的版本中继续工作?向后兼容会更好吗?这只是最佳实践的问题吗?还有什么?

编辑 错字

4

6 回答 6

11

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

是的。

这是允许的,因为 PHP 是松散的,但是打开严格模式会给你上帝诚实的真理。

遵守严格的标准,我们能得到什么?它是否确保代码将在未来的版本中继续工作?向后兼容会更好吗?这只是最佳实践的问题吗?

是的。

还有什么?

没错。_

于 2011-07-21T19:04:43.467 回答
4

null不是一个对象。你基本上会做:

$test = 'this is not an object';
$test->suddenly_it_is_an_object = true;

...您想知道为什么会收到警告吗?

于 2011-07-21T19:05:14.043 回答
3

使用这个:

$test = null;

您没有明确(对 PHP 引擎和将阅读您的代码的人)$test是一个对象。


因此,作为读者,后来发现它$test被用作对象并不自然——这意味着您的代码比明确声明$test为对象时更难维护。

于 2011-07-21T19:05:34.730 回答
1

这样做并= null;按照标准阅读是非常糟糕的new ...;

于 2011-07-21T19:05:10.410 回答
1

如果您养成了正确声明对象的习惯,那么看到这个严格模式错误将帮助您捕捉 PHP 喜欢在您不小心键入for等$test = new stdClass();时向您抛出的隐式变量声明错误,从而为您节省不必要的麻烦。$usr$user

于 2011-07-21T19:07:44.317 回答
1

你可以像这样将一些东西投射到一个对象上:

$object = (object) array(
    'id' => 5,
    'name' => 'Darsstar',
    'key' => 'value',
);

但是 new StdClass() 仍然是最严格的方法。虽然我有这种感觉,但您只希望错误消失,并且可能更喜欢这种语法。

于 2011-07-21T19:21:04.913 回答