2011-12-11 60 views
0

我正在开发一个需要复制功能的项目&,其中的变量需要随时更换。立即复制一个函数PHP

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

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

我希望能够调用myfunction1(),它实际上并不在代码中存在,但究竟该samething作为一个以上的,除了它现在采取从我的自定义变量值,所以它会是这样的:

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

任何一个可以帮助请?

+3

为什么你需要这样做?我敢打赌你有更好的解决方案。 –

+0

你有没有考虑过使用参数? – kapa

+0

因为实际上这个函数是一个很大的函数,它做了很多不同的事情,我不想在代码中复制它,我也不想混淆SESSION。谢谢 – Olizt

回答

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和其他相关主题。

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'); 
+1

我得到了“直接的答案是'eval'”,并且几乎在我的键盘上呕吐。然后我读到“我不推荐”。我希望@Olizt能够理解他们不推荐他们使用它的强度。 – adlawson

+1

这是我第一次需要斜体和粗体。这就是问题的真正问题,虽然... – FakeRainBrigand

+0

谢谢你们两个,我会重新做该死的东西:) – Olizt

1

这是什么参数是,我觉得你想找的待办事项是这样的:

$myCustomVariable = 'Some value'; 


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

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

感谢这一点,但我不能仅仅因为该功能已经建成的方式使用参数。它使用大量的会话,而不是任何参数,但我客人我不得不重做它。谢谢 – Olizt

+0

@Olizt可以随意发布实际功能,如果它太大或许是pastebin的话,没有看到确切的问题,我们只能推测 –

相关问题