Nasıl PHP dinamik parametrelerini geçmek için?

2 Cevap php

Ben kendi iç fonksiyonuna $ rotayı geçmesi gerekiyor, ama başarısız oldu:

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

Ben PHP5.3 kullanıyorum, yardımcı olabilecek bazı özellik var?

2 Cevap

Ben ne yazık ki, PHP 5.2 böyle bir şey yapabilir sanmıyorum - ama PHP 5.3 kullandığınız gibi ... Eğer bu işe almak için Kapaklar kullanabilirsiniz.


To begin, here's a quick example of using a Closure :

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

Görüntüler:

string 'xyz' (length=3)

use anahtar fark ;-)


And here's an example of how you could use that in your specific case :

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);

Ve bu çıktıyı almak istiyorum:

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

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

Birkaç not:

  • Ben kullanılan preg_replace_callback , and not preg_replace - Ben denilen bazı geri çağırma işlevi istediğiniz gibi.
  • Ben geri arama gibi bir anonymous function istimal
  • And that anonymous function is importing $route, with the new use keyword.
    • Hangi benim geri arama işlevi, her zaman geri çağırma fonksiyonu preg_replace_callback tarafından geçirilen maçları, ve $route hem de erişebileceğiniz anlamına gelir.

Yerine küresellerle kullanarak $ this-> güzergahını kullanarak geri arama ve kapmak $ rota dahil, bir sınıfta her şeyi koymak. Sen) (preg_replace_callback kullanıyor olmalıdır. Bir sınıf kullanım Array bir geri ($ class, 'geri') veya Array ('SınıfAdı', 'geri çağırma) kullanın.