【问题标题】:PHP Dynamic object operator within foreach loopforeach循环中的PHP动态对象运算符
【发布时间】:2014-03-14 15:31:49
【问题描述】:

我有这个功能:

$request = array("setNewDoc", "setNewFile");

foreach($request as $key => $val) {
    $result = $controller->setNewDoc($key);
    $smarty->assign('result', $result);
    $index = TPL_DIR . 'docs.tpl';
}

是否可以通过在我的指针中放置一个变量来使这个循环动态化?我数组中的$keys也是函数名。

点赞$controller->$variable($key);

像这样(伪代码)

$result = array("setNewDoc", "setNewFile");

foreach($request as $key => $val) {
    $result = $controller->set$key($request);
    $smarty->assign('result', $result);

    // $key = setNewDoc or setNewFile
    $index = TPL_DIR . $key . '.tpl';
}

【问题讨论】:

    标签: php variables operator-keyword


    【解决方案1】:

    是的,你可以。 您可以使用它来强制转换新对象或访问属性。

    例如

    $classname = foo; $prop=名称;

    $myObject = new $classname(); $myObject->{$prop} 或函数:$myObject->{$prop}()

    您甚至可以遍历对象的属性

    foreach ($myObject as $key => $value) { print $key // 将是名称 print $value // 将是属性的值 }

    【讨论】:

      【解决方案2】:

      是的,这是可能的,实际上很简单:

      <?php
      
      class MyClass {
      
          function myMethod()
          {
              echo "Hello World";
          }
      
      }
      
      $obj = new MyClass();
      $dynamicVar = 'Method';
      
      $obj->{'my' . $dynamicVar}();
      

      用大括号括起来你的方法名,你可以在里面做一些字符串连接。处理完括号内的所有内容后,它将最终用作您的方法名称。

      对于您的特定用例,您可以编写类似

      <?php
      $result = array("setNewDoc", "setNewFile");
      
      foreach($request as $key => $val) {
          $result = $controller->{'set' . $key}($request);
          $smarty->assign('result', $result);
      
          // $key = setNewDoc or setNewFile
          $index = TPL_DIR . $key . '.tpl';
      }
      

      【讨论】:

        猜你喜欢
        • 2012-09-12
        • 1970-01-01
        • 2011-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-20
        • 2013-06-10
        • 2019-10-08
        相关资源
        最近更新 更多