【问题标题】:Calling php functions using concatenation - $newArticle->setInternationalText.$i();使用连接调用 php 函数 - $newArticle->setInternationalText.$i();
【发布时间】:2013-09-24 15:02:36
【问题描述】:

我有八个 php 函数。他们是:

setInternationalText1()

setInternationalText2()

setInternationalText3()

...etc

我想使用最少的代码一次调用这些函数。我曾尝试使用for loop,但 PHP 似乎不允许我将我的 'counter' 变量连接到函数名的末尾。见下文...

for ($i = 1; $i <= 8; $i++)
{  
   $newArticle->setInternationalText.$i();
}  

上面给了我以下(symfony)错误:

Notice: Undefined property: Imagine\NewsletterBundle\Entity\Article::$setInternationalText in /Applications/MAMP/htdocs/newsletters/src/Imagine/NewsletterBundle/Controller/SectionController.php line 260

【问题讨论】:

    标签: php symfony for-loop concatenation


    【解决方案1】:

    正确的语法是:

    $newArticle->{setInternationalText . $i}();
    

    【讨论】:

      【解决方案2】:

      您可以使用 call_user_func() 函数:

      for ($i = 1; $i <= 8; $i++)
      {
          $fn = 'setInternationalText'.$i;
          call_user_func(array($newArticle,$fn));
      } 
      

      http://php.net/manual/en/function.call-user-func.php

      【讨论】:

      • 酷。我在哪里传递我的函数参数?
      • 如果要一个一个传递,可以这样: call_user_func(array($newArticle,$fn),$param1,$param2,...);或者你可以使用一个数组: $params = array('1','2','3'); call_user_func_array(array($newArticle,$fn),$params);
      猜你喜欢
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 2014-04-28
      • 2021-06-22
      • 2016-07-09
      相关资源
      最近更新 更多