$locale = 'zh_CN';
$translations = [
'zh_CN' => [
'hello' => '你好',
'world' => '世界',
],
'jp' => [
'hello' => '靠你吉娃',
'world' => '爱上了看到你',
]
];
$translate = function($message) use(&$locale,$translations,&$translate){
$parts = explode(" ",$message);
if(count($parts) > 1){
foreach($parts as &$part){
$part = $translate($part);
}
return implode('', $parts);
}
return $translations[$locale][$message]??$message;
};
echo $translate('hello world').PHP_EOL;
$locale = "jp";
echo $translate('hello world').PHP_EOL;
有的时候使用匿名函数需要调用自身来进行递归或者运算,上面就是一个简陋的示例,通过匿名函数自身的调用进行处理翻译,输出结果:
你好世界
靠你吉娃爱上了看到你
说明:
匿名函数(Anonymous functions),也叫闭包函数(closures),可以从父作用域中继承变量。
任何此类继承的变量都应该用 use 语言结构传递进去。
调用自身的话则需要传递自身的一个引用,这样就可以实现递归等各种算法了。