Php 如何在不使用静态方法的情况下创建自定义细枝函数类?

Php 如何在不使用静态方法的情况下创建自定义细枝函数类?,php,twig,templating-engine,Php,Twig,Templating Engine,我可以像这样为我的项目创建一个细枝扩展 class Functions extends Twig_Extension{ public function getName(){return 'foobar';} public function getFunctions() { return array( 'loremipsum' => new \Twig_SimpleFunction('asset', 'Functions::lorem

我可以像这样为我的项目创建一个细枝扩展

class Functions extends Twig_Extension{
    public function getName(){return 'foobar';}

    public function getFunctions() {
        return array(
            'loremipsum' => new \Twig_SimpleFunction('asset', 'Functions::loremipsum')
        );

    public static function loremipsum($foo) {
        return $foo;
    }
}
这是可行的,但我想使用构造函数在一些函数中注入一些我需要的数据

Twig\u SimpleFunction
中简单地使用
'asset'
将导致PHP尝试执行函数
loremipsum()

查看扩展Twig_函数的所有不同类,了解指定模板函数的所有不同方法

对于较新的
Twig_SimpleFunction
,似乎可以将任何类型的作为第二个参数传递给构造函数:

new Twig_SimpleFunction('foo', array($this, 'bar'))

从twig版本1.23.1及更高版本更新如下:

class LogoExtension extends \Twig_Extension
{

    public function getFunctions()
    {
        return array(
            new \Twig_SimpleFunction('logo', array($this, 'logo'), array('is_safe' => array('html'))),
        );
    }

    public function logo()
    {
        return 'result';
    }


    /**
     * {@inheritdoc}
     */
    public function getName()
    {
        return 'logo';
    }
}
当然,您可以在
services.yml
config文件中将此扩展类作为细枝扩展添加

services:
    company.twig.extension.logo:
        class:  Acme\DemoBundle\Twig\Extension\LogoExtension
        tags:
            -   {   name:   twig.extension}

遗憾的是,
Twig\u Function\u方法
(以及所有
Twig\u Function.*
类)都被弃用了。它将在2.0中删除
services:
    company.twig.extension.logo:
        class:  Acme\DemoBundle\Twig\Extension\LogoExtension
        tags:
            -   {   name:   twig.extension}