Php 如何取消对构造函数的引用?
理想情况下,我想做这样的事情Php 如何取消对构造函数的引用?,php,Php,理想情况下,我想做这样的事情 $formElement->addValidator ( (new RegexValidator('/[a-z]/') )->setErrorMessage('Error') // setErrorMessage() returns $this ); 当然PHP不允许这样,所以我接受了这个 $formElement->addValidator ( RegexValidator::create('/[a-z]/')->
$formElement->addValidator
(
(new RegexValidator('/[a-z]/') )->setErrorMessage('Error')
// setErrorMessage() returns $this
);
当然PHP不允许这样,所以我接受了这个
$formElement->addValidator
(
RegexValidator::create('/[a-z]/')->setErrorMessage('Error')
);
基类中的代码
static public function create( $value )
{
return new static( $value );
}
class RegexValidator extends Validator
{
public function __construct( $regex )
{
....
}
我想更进一步,做一些像这样的事情
static public function create()
{
return call_user_func_array( 'static::__construct', func_get_args() );
}
再说一遍,PHP不允许我这样做。我可以为每个验证器编写单独的“create”方法,但我希望它更流畅一些
有什么建议吗?请使用以下网址:
科辛大量地给我指出了正确的方向,反思-(谢谢克日兹托夫) 请注意,后期静态绑定适用,这只是PHP>=5.3 感兴趣的方法是验证程序::create()。它提供了一种解决方法,解决了在bee以内联方式创建的对象上调用方法的能力不足的问题(请参见我的原始问题) 基类
class Validator
{
....
static public function create()
{
$class = new ReflectionClass( get_called_class() );
return $class->newInstanceArgs( func_get_args() );
}
public function setErrorMessage( $message )
{
....
}
扩展类
static public function create( $value )
{
return new static( $value );
}
class RegexValidator extends Validator
{
public function __construct( $regex )
{
....
}
一个使用示例
$form
->getElement('slug')
->setLabel( 'Slug' )
->addValidator( RegexValidator::create('/[a-z]/')->setErrorMessage('Error') )
->addValidator( RequiredValidator::create() );
令人遗憾的是,有人强迫你使用一种与你的思维方式不符的语言。我建议使用一个临时变量,而不是伪Singelton/-Factorys,只是为了保存一行代码。@Kingcrunch是的,也许吧,但没有什么冒险,没有什么收获:)对于仍然回答这个问题的人,值得指出的是,PHP5.4确实支持@TomError首先需要的去引用构造函数语法。当我的8小时限制到期时,我会发布我的实际解决方案。哦,好吧,我要删除这篇帖子吗?@yes123:他提供了额外的信息和解决方案,我看不出有什么问题。不过,对代码再多解释一下就好了。@Bobby:除了包装在静态文件中的Cozin answer之外,我没有看到任何添加的代码method@yes123:我不同意,这不仅仅是容器类中的包装函数,它在类中的位置对类的用途和用法至关重要。@tom:这是唯一可以放入这两行代码的地方:D不管怎样,可以在这里留下它。你的答案得了+5分