foreach循环中的PHP动态对象运算符

时间:2014-03-14 15:31:49

标签: php variables operator-keyword

我有这个功能:

$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';
}

2 个答案:

答案 0 :(得分:0)

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

<?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';
}

答案 1 :(得分:0)

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

例如

$ classname = foo; $丙=名;

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

您甚至可以预约对象的属性

foreach($ myObject as $ key =&gt; $ value){ print $ key //将是名字 print $ value //将是属性的值 }