【问题标题】:PHP strict standards: is this bad?PHP 严格标准:这很糟糕吗?
【发布时间】:2011-10-10 12:16:01
【问题描述】:

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

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

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

显然正确的做法是:

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

所以我想知道:

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

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

编辑 错别字

【问题讨论】:

  • 我什至不知道我可以用 = null;大声笑
  • 我想知道您如何解释第一个示例中的代码? null 怎么可能有任何属性?
  • $text 不存在时,他可以设置$text->name,这一事实根本...说明了这一点。
  • @PeeHaa:你应该离开它!就像我说的......这很能说明问题。

标签: php stdclass


【解决方案1】:

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

是的。

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

通过遵守严格的标准,我们可以获得什么?它使 确定代码将在未来版本中继续工作吗?会不会更好 向后兼容?这只是最佳实践的问题吗?

是的。

还有什么?

正确

【讨论】:

  • -1 强调而不考虑它。另外,它甚至没有回答这个问题。我知道$test = null 用于对象制作真的很脏,但是第二个“是”并不意味着该死的东西,它甚至没有意义。现在是正确的事情。如果说它是正确的(谁说的?),并不意味着它在所有情况下都是正确的,或者说首先说它的人是正确的。通过坚持/不坚持严格的标准,我们真正获得/失去了什么?并且,请不要对这个问题回答“是”。
  • @enrey:它确保代码在未来的版本中继续工作,并且它会更好地向后兼容。这也是最佳实践的问题。你不会读吗?当你在这方面明显有过错时,不要指责我“没有考虑它”。
【解决方案2】:

null 不是对象。你基本上会这样做:

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

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

【讨论】:

    【解决方案3】:

    使用这个:

    $test = null;
    

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


    因此,作为读者,后来发现 $test 被用作对象并不自然——这意味着 您的代码比您明确声明 @987654324 时的可维护性低 @ 作为一个对象。

    【讨论】:

      【解决方案4】:

      这样做和阅读 = null; 与标准 new ...; 一致是非常糟糕的

      【讨论】:

        【解决方案5】:

        如果您养成使用 $test = new stdClass(); 正确声明对象的习惯,那么看到这个严格模式错误将帮助您发现 PHP 喜欢在您不小心为 @987654323 键入 $usr 时抛出的隐式变量声明错误@ 之类的,省去你无谓的头疼。

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-02
            • 2017-05-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多