PHP对静态方法的引用
我正在我的项目中做类似的事情:PHP对静态方法的引用,php,class,object,doctrine,symfony,Php,Class,Object,Doctrine,Symfony,我正在我的项目中做类似的事情: use Doctrine\ORM\EntityRepository; class ArticlesType extends AbstractType { static function statusFilter(EntityRepository $er) { return $er->createQueryBuilder('x')->where('x.status = 1'); } public functi
use Doctrine\ORM\EntityRepository;
class ArticlesType extends AbstractType {
static function statusFilter(EntityRepository $er) {
return $er->createQueryBuilder('x')->where('x.status = 1');
}
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('User', 'entity', array('class' => 'FP\MyBundle\Entity\Users',
# 'query_builder' => call_user_func(array('self','statusFilter'), ??)
'query_builder' => function(EntityRepository $er) { return ArticlesType::statusFilter($er); }
))
}
}
关于如何对statusFilter方法进行“更好”的调用,有什么想法吗
正如您所看到的,我用call\u user\u func尝试了一下,但我不知道要传递给它哪个参数
谢谢您可以使用
self::statusFilter($er);
call_user_func(array('self', 'statusFilter'), $er);
或者,您可以使用
self::statusFilter($er);
call_user_func(array('self', 'statusFilter'), $er);
我现在更明白这个问题了。正如@igorw所暗示的那样,Symfony期待着一个关闭;然而,这并不意味着它不能写得更好 您可以创建一个自定义帮助器,然后在buildFom调用中使用它
function funcRef($func){
return create_function('', "return call_user_func_array('{$func}', func_get_args());");
}
然后您可以在buildForm方法中使用它,如下所示:
'query_builder' => funcRef("ArticlesType::statusFilter")
否。
Symfony\Bridge\document\Form\Type\EntityType
接受query\u builder
选项并将其传递给Symfony\Bridge\document\Form\ChoiceList\EntityChoiceList
查询生成器需要是原则\ORM\QueryBuilder
的实例或闭包
(匿名函数)
另外,在大多数情况下,macek
所建议的调用_user_func会起作用,但在闭包中不会起作用,因为它的作用域不同。这可能在PHP5.4中得到解决,但目前它根本不起作用
我会像您一样,使用闭包并从闭包中调用静态方法
EDIT:而且您最初尝试做的也不会起作用,因为在这种情况下,您已经在调用静态方法了。那不是你想要的。您想要的是传递一个函数,该函数将在以后某个时间点调用。我没有得到的是这个$er变量/它似乎不“存在”(即,我无法将其传递给函数,但当我执行函数(EntityRepository$er)时,它“出现”