我正在开发一个需要复制功能的项目。即时执行,其中的变量也需要动态更换。
一个简单的例子就是这样:
function myfunction()
{
$abc = $_SESSION['abc'];
return $abc;
}
我希望能够调用myfunction1(),它实际上并不存在于代码中但与上面的内容完全相同,只是它现在从我的自定义变量获取值,所以它看起来像这样:
function myfunction1()
{
$abc = $myCustomVariable;
return $abc;
}
有人帮忙吗?
答案 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');