2010-05-01 97 views
2

好的,我正在研究使用create_function來做我需要做的事情,而且我沒有看到用它定義默認參數值的方法。這可能嗎?如果是這樣,在php中輸入參數create_function函數的最佳方法是什麼?也許使用addslashes具有默認參數值的create_function?

嗯,比如說,我有像這樣的功能:

function testing($param1 = 'blah', $param2 = array()) 
{ 
    if($param1 == 'blah') 
     return $param1; 
    else 
    { 
     $notblah = ''; 
     if (count($param2) >= 1) 
     { 
      foreach($param2 as $param) 
       $notblah .= $param; 

      return $notblah; 
     } 
     else 
      return 'empty'; 
    } 
} 

好了,我怎麼會用create_function做同樣的事情,添加參數和默認值嗎?

問題是,參數來自TEXT文件以及函數本身。 因此,想知道使用create_function的最佳方法以及應該如何解析字符串。

謝謝:)

+0

你,不管怎樣,已經使用PHP5.3?如果是這樣,請查看http://de2.php.net/manual/en/functions.anonymous.php - 您可能也對策略模式感興趣http://sourcemaking.com/design_patterns/strategy – Gordon 2010-05-01 09:02:10

回答

2

考慮到與create_function創建這樣一個功能:

$func = create_function('$who', 'echo "Hello, $who!";'); 

你可以這樣稱呼它:

$func('World'); 

,你會得到:

Hello, World! 


現在,有一個參數的默認值,代碼看起來是這樣的:

$func = create_function('$who="World"', 'echo "Hello, $who!";'); 

注:我只加了默認參數的值,在傳遞給create_function的第一個參數中。

,然後,調用新功能:

$func(); 

我仍然得到:

Hello, World! 

即已經使用了該參數的默認值。


因此,參數的默認值與create_function一起使用,就像它們對其他函數一樣:只需將默認值置於參數列表中即可。

之後,關於如何創建包含參數及其值的字符串......我猜想,有幾串字符串連接,不會忘記逃避應該轉義的內容。

+0

好的,謝謝你,這是來自一個文本文件,所以它可能是這樣的參數:'誰= ='世界',這也可以在那裏工作,或者是否有一個函數用雙引號替換單引號?或者我應該使用'addslashes'嗎? – SoLoGHoST 2010-05-01 08:51:11

+0

如果你把它變成'$ params'變量,你可以使用'$ params'變量作爲'create_function'的第一個參數:它的內容正是應該在那裏使用的內容。 – 2010-05-01 08:53:40

+0

非常感謝你,所以我不需要在參數中跳過任何字符比對嗎? – SoLoGHoST 2010-05-01 09:13:58

0

你想創建一個匿名函數嗎? create_function用於創建匿名函數。否則,你需要創建功能一般都喜歡:

function name($parms) 
{ 
    // your code here 
} 

如果你想使用create_function,這裏是原型:

$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);'); 
echo "New anonymous function: $newfunc\n"; 
echo $newfunc(2, M_E) . "\n"; 
// outputs 
// New anonymous function: lambda_1 
// ln(2) + ln(2.718281828459) = 1.6931471805599 
0

我有同樣的問題,試圖傳遞一個數組到一個創建的回調函數......我想我會創建一個臨時變量......這是醜陋的,但我最好做的然後用斜線折磨自己,我的代碼已經足夠神祕,就像現在這樣。

所以,來說明:

global $tmp_someArray; 
$tmp_someArray = $someArray; 
$myCallback = create_function(
    '$arg1', 
    ' 
      global $tmp_someArray; 
      // do stuff with $tmp_someArray and $arg1.... 
      return($something); 
    ' 
);