2011-12-11 51 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的話,沒有看到確切的問題,我們只能推測 –

相關問題