簡體   English   中英

如何在PHP中動態傳遞參數?

[英]How to pass parameters dynamically in PHP?

我需要將$ route傳遞給它的內部函數,但是失敗了:

function compilePath( $route )
{
    preg_replace( '$:([a-z]+)$i', 'pathOption' , $route['path'] );
    function pathOption($matches)
    {
        global $route;//fail to get the $route
    }
}

我正在使用php5.3,是否有一些功能可以幫助您?

不幸的是,我認為您無法在PHP 5.2中執行類似操作,但是當您使用PHP 5.3時...您可以使用Closures使其正常工作。


首先,這是一個使用Closure的簡單示例:

function foo()
{
    $l = "xyz";
    $bar = function () use ($l)
    {
        var_dump($l);
    };
    $bar();
}
foo();

將顯示:

string 'xyz' (length=3)

注意use關鍵字;-)


這是一個如何在特定情況下使用它的示例:

function compilePath( $route )
{
    preg_replace_callback( '$:([a-z]+)$i', function ($matches) use ($route) {
        var_dump($matches, $route);
    } , $route['path'] );
}

$data = array('path' => 'test:blah');
compilePath($data);

然后您將得到以下輸出:

array
  0 => string ':blah' (length=5)
  1 => string 'blah' (length=4)

array
  'path' => string 'test:blah' (length=9)

一些注意事項:

  • 我使用了preg_replace_callback ,而不是preg_replace ,因為我想調用一些回調函數。
  • 我正在使用匿名函數作為回調
  • 那個匿名函數正在導入$route和新的use關鍵字。
    • 這意味着,在我的回調函數中,我可以訪問兩個匹配項,它們始終由preg_replace_callback傳遞給回調函數,以及$route

將所有內容放在一個類中,包括回調,並使用$ this-> route而不是使用globals來獲取$ route。 您應該使用preg_replace_callback()。 要使用來自類的回調,請使用Array($ class,'callback')或Array('className','callback)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM