【问题标题】:Require declaration of properties before assignment需要在赋值前声明属性
【发布时间】:2012-09-17 21:42:08
【问题描述】:

以下在php中是合法的。

class Foo{
    function setBar($bar){
        $this->bar = $bar;
    }
}

有没有办法在使用前生成属性Foo#bar 尚未声明的通知? 我厌倦了浪费时间调试错别字。

【问题讨论】:

  • 使用一个可以为你生成getter和setter的好IDE,你需要做的就是声明私有属性。 ZendStudio 浮现在脑海中
  • @Ibu 这可能有点离题,但有没有免费/低成本的 IDE 可以做到这一点?
  • @Panique 是的,你可以使用 Eclipse 进行 php 开发,Zend 是基于 Eclipse 的
  • 除非您想从 Zend Studio 付费,否则 Eclipse 不会开箱即用。有一个插件 e-surf 但他们的更新站点目前似乎已关闭。我创建了一个代码模板(如下),它有助于 Preference->PHP->Editor->Templates : public function get${type}(){ return $$this->${variable}; } 公共函数 set${type}(${type} $$${variable}){ $$this->${variable} = $$${variable}; }

标签: php properties declaration error-reporting


【解决方案1】:

我想这就是你所追求的:

class Foo
{    
  function setBar( $bar )
  {
    $this->bar = $bar;
  }

  public function __set( $name, $value )
  {
    throw new Exception( 'Can not set property ' . $name );
  }    
}

$foo = new Foo();
$foo->setBar( 'bar' );

这里发生的情况是,当调用超出范围的类属性时,会调用魔术 __get 或 __set。在那里你可以决定如何处理这种情况。

【讨论】:

  • 嗯,这是一种有趣的方法,尽管需要将此代码添加到我不想这样做的每个类/基类中。你会认为 php 会发出 E_NOTICE。
  • 如何处理由您决定。如果您愿意,可以使用基类并发出 E_NOTICE
  • 重点是我不想编写代码来检查正确性 - 我想要 php 或某种类型的 lint 程序来完成它。我想这可能会出现在 php >=5.4 中的一个特性中,但至少可以让它不碍事。
猜你喜欢
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 2021-06-21
  • 2011-01-02
相关资源
最近更新 更多