0

我正在开发一个项目,该项目需要动态复制和执行函数,并且也需要动态替换其中的变量。

一个简单的例子是这样的:

function myfunction()
{
    $abc = $_SESSION['abc'];
    return $abc;
}

我希望能够调用 myfunction1() ,它实际上并不存在于代码中,但与上面的完全相同,只是它现在从我的自定义变量中获取值,所以它看起来像这样:

 function myfunction1()
 {
     $abc = $myCustomVariable;
     return $abc;
 }

有人帮忙吗?

4

3 回答 3

1

这就是参数的用途,我认为您正在寻找这样的事情:

$myCustomVariable = 'Some value';


function myfunction($var=$_SESSION['abc'])
{
    $abc = $var;
    return $abc;
}

myfunction(); //returns $_SESSION['abc']
myfunction($myCustomVariable); //returns "Some Value"
于 2011-12-11T17:23:39.040 回答
1

您描述的函数越复杂,听起来就越像是具有注入依赖项的对象的完美候选者。

例如,您可以拥有(仅在此处描述基本接口):

class myClass
{
    public function __construct($provider DataProvider)
    {
        $this->provider = $provider;
    }

    // Please name this something better
    public function doStufferer()
    {
        if ($this->provider->hasParam('foo'))
        {
            return $this->provider->getParam('foo');
        }
    }
}

class SessionProvider implements DataProvider
{
    // Session specific stuff
}

class OtherProvider implements DataProvider
{
    // Other provider stuff
}

interface DataProvider
{
    public function getParam($key);
    public function hasParam($key);
    public function setParam($key, $value);
}

然后你可以像这样使用它:

$dataProcessor = new myClass(new SessionProvider);
// OR $dataProcessor = new myClass(new OtherProvider);
$dataProcessor->doStufferer();

请查看PHP 类和对象以及其他相关主题。

于 2011-12-11T17:39:22.660 回答
0

直接的答案是eval推荐。


你可以让你的函数接受一个参数,像这样。

 function myfunction1($some_var)
 {
     $abc = $some_var;
     return $abc;
 }

 // call it like...
 myfunction1($myCustomVariable);

如果您需要访问一个变量,但名称是由动态代码生成的,您可以使用$GLOBALS.

 function myfunction1($name_of_var)
 {
     $abc = $GLOBALS[$name_of_var];
     return $abc;
 }

 // call it like...
 $myCustomVariable = 'a value'
 myfunction1('myCustom' + 'Variable');
于 2011-12-11T17:19:10.583 回答