PHP严格标准:这是不好的吗?

5

当我创建一个标准类时,我通常会做以下操作:

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

然而在严格模式下会出现错误。

所以显然正确的做法是:

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

所以我想知道:

使用$test = null;来实现我的目的是否明显不合适?

遵循严格标准能给我们带来什么好处?它可以确保代码在未来版本中继续工作吗?这样做是否更好地向后兼容?这只是最佳实践的问题吗?还是其他原因?

编辑 拼写错误


2
我甚至不知道我可以用 = null; 做那个,哈哈 - dynamic
我想知道你如何解释第一个示例中的代码?null 怎么可能有属性呢? - Ree
$text根本不存在时,他可以设置$text->name的事实...这说明了一些问题。 - Lightness Races in Orbit
@PeeHaa:你应该把它留下来!就像我说的...它是有意义的。 - Lightness Races in Orbit
6个回答

11

我想问一下,执行 $test = null; 这样的操作是不是不太好?

是的。

虽然 PHP 比较宽松,这种操作是允许的,但开启严格模式会给出真相。

如果遵循严格标准,我们能得到什么好处?它是否可以确保代码在将来的版本中继续工作?它是否更好地向后兼容?还是只是最佳实践的问题?

都是。

还有其他方面吗?

这是正确的做法。


-1 强调在不加思考的情况下。而且,它甚至没有回答问题。我知道 $test = null 用于对象创建实在是很不规范,但是第二个“Yes”根本毫无意义,甚至不合理。现在谈谈正确的事情。如果某人说它是正确的(由谁确定?),并不意味着在每种情况下都是正确的,或者说首先说出这句话的人就是正确的。坚持/不坚持严格的标准会给我们带来/失去什么呢?请勿回答此问题的“Yes”。 - enrey
@enrey:它确保代码在未来版本中继续工作,并且它将更好地向后兼容。这也是最佳实践的问题。你看不懂吗?当你在这方面明显有错时,不要指责我“没有考虑到它”。 - Lightness Races in Orbit

4

null不是一个对象。你实际上做的是:

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

......你不禁想知道为什么会收到警告?


3
使用以下内容:
$test = null;

您没有清楚地表明(对PHP引擎和阅读您代码的人),$test是一个对象。因此,作为读者,后来发现$test被用作对象并不自然 - 这意味着您的代码比显式声明$test为对象更难维护。

1
你可以像这样将某个东西转换为对象:
$object = (object) array(
    'id' => 5,
    'name' => 'Darsstar',
    'key' => 'value',
);

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


1

使用= null;是非常糟糕的做法,建议使用标准的new ...;


1

如果你养成了正确声明对象的习惯,比如使用$test = new stdClass();,那么当出现严格模式错误时,你就能够捕捉到 PHP 喜欢抛出的隐式变量声明错误,例如当你意外地将 $usr 错误地输入为 $user 等等,从而避免不必要的头痛。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接