在PHP上复制一个函数

时间:2011-12-11 17:10:24

标签: php variables copy instance on-the-fly

我正在开发一个需要复制功能的项目。即时执行,其中的变量也需要动态更换。

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

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

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

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

有人帮忙吗?

3 个答案:

答案 0 :(得分:1)

这是参数的用途,我认为你看起来像这样:

$myCustomVariable = 'Some value';


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

myfunction(); //returns $_SESSION['abc']
myfunction($myCustomVariable); //returns "Some Value"

答案 1 :(得分: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 Classes and Objects以及其他相关主题。

答案 2 :(得分: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');