0

我想獲得下面的PHP代碼來工作。不工作的部分是內部變量$greetingCount(返回的函數的局部變量)不綁定到外部變量$greetingCount(方法參數變量)。如何將返回的函數局部變量綁定到方法參數?

class Greetings { 

    public static function getRepeatGreeterFunc($greetingCount) { 

    $repeatGreeter = function($greeting) { 

     // I want $greetingCount to bind to the outer $greetingCount here. 
     // If 4 is passed to getRepeatGreeterFunc, then it should be 4 here, 
     // so that what I get is a function that prints the greeting 4 times. 

     for ($i = 0; $i < $greetingCount; $i++) { 

     echo $greeting . "\n"; 

     } 

    }; 

    return $repeatGreeter; 

    } 

    public function greet() { 

    $repeatGreeter = self::getRepeatGreeterFunc(4); 
    call_user_func($repeatGreeter, "HELLO"); 

    } 

} 

$greetings = new Greetings(); 
$greetings->greet(); 

//輸出:

none 

//預期輸出:

HELLO 
HELLO 
HELLO 
HELLO 

注:我想一個解決方案時,靜態方法是由非靜態的也工作,否則兩張這兩種情況下的不同解決方案都可以。

回答

0

答案就是利用PHP use關鍵字:

class Greetings { 

    public static function getRepeatGreeterFunc($greetingCount) { 

    $repeatGreeter = function($greeting) use ($greetingCount) { 

     // I want $greetingCount to bind to the outer $greetingCount here. 
     // If 4 is passed to getRepeatGreeterFunc, then it should be 4 here, 
     // so that what I get is a function that prints the greeting 4 times. 

     for ($i = 0; $i < $greetingCount; $i++) { 

     echo $greeting . "\n"; 

     } 

    }; 

    return $repeatGreeter; 

    } 

    public function greet() { 

    $repeatGreeter = self::getRepeatGreeterFunc(4); 
    call_user_func($repeatGreeter, "HELLO"); 

    } 

} 

$greetings = new Greetings(); 
$greetings->greet(); 

OUTPUT:

HELLO 
HELLO 
HELLO 
HELLO 
相關問題