PHP将函数添加到数组而不执行

时间:2014-08-01 09:58:49

标签: php zend-framework2

我正在为我的项目使用自动代码生成器。 我使用Zend Framework 2进行文件/类/方法反射。 我需要向返回的数组添加元素:

 public function getServiceConfig()
 {
     return array(
         'factories' => array(
             'Album\Model\AlbumTable' =>  function($sm) {
                 $tableGateway = $sm->get('AlbumTableGateway');
                 $table = new AlbumTable($tableGateway);
                 return $table;
             },
             'AlbumTableGateway' => function ($sm) {
                 $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                 $resultSetPrototype = new ResultSet();
                 $resultSetPrototype->setArrayObjectPrototype(new Album());
                 return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
             },
         ),
     );
 }

我可以找到工厂'数组,但不能添加新元素(函数)。 (我需要向工厂添加新元素,例如"' objectTableGateway' => function($ sm){...}") 之后我编写方法体,如body = var_export(array,true);

  1. 如果我只添加函数 - 函数执行;
  2. 如果我添加引号 - 我需要在代码写入文件后手动清除引号。
  3. 如何解决这个问题?

    我看到的唯一解决方案是生成整个方法体作为纯文本

1 个答案:

答案 0 :(得分:0)

$arr = array(
  'factories' => array(
      'Album\Model\AlbumTable' =>  function($sm) {
          echo $sm;
      },
      'AlbumTableGateway' => function ($sm) {
          echo $sm;
      },
  ));

 $arr['factories']['Album\Model\AlbumTable']("Test");   

这似乎对我有用。你如何执行这个功能?

 $arr['factories']['NewFunction'] = function($sm) {
     echo $sm . $sm;
 };

 $arr['factories']['NewFunction']("test");

即时添加新的也可以。你也可以循环使用它们

 foreach($arr["factories"] as $function) {
     $function("TEST2");
 }