我有一些闭包,我已经绑定了一些变量。
e.g。
$x = function() { echo "hi there"; };
我想确保$ x永远不会无意中切换到其他值。知道怎么做吗?
我不能使用常量,因为它们只能解析标量值。
答案 0 :(得分:5)
此代码的目的是什么?
我的意思是,函数本身是常量,因为它们无法重新声明。为什么不这样做呢?
function x() { echo "hi there"; };
如果您正在使用闭包,则可以始终使用namespace,因此您的函数不会遇到闭包之外的碰撞。
答案 1 :(得分:1)
我不认为你能做到这一点:
但是我找到了一个解决方法,这是我唯一能想到的,不知道它是否适合你:
使用类并且它是__destruct()
魔术方法
Class Hulk {
function __construct(){
echo "Hulk is born!<br>";
}
function __destruct(){
throw new Exception('Someone is trying to destroy Hulk, not knowing that he is indestructible!!!');
}
}
$x = new Hulk();
$x = "hello";
当您尝试将“hello”分配给X时,它将引发异常:
Fatal error: Uncaught exception 'Exception' with message 'Someone is trying to destroy Hulk, not knowing that he is indestructible!!!' in /Applications/MAMP/htdocs/test.php:38 Stack trace: #0 /Applications/MAMP/htdocs/test.php(44): Hulk->__destruct() #1 {main} thrown in /Applications/MAMP/htdocs/test.php on line 38
你也可以通过回声或任何你想要的东西使它变得更加沉默。这样,您可以将一系列函数分组为类中的方法,并确保它们始终可访问。
答案 2 :(得分:1)
使用Closure的好方法是用一些辅助类包装它 这是我用的东西
class Events {
private $events;
public function addEvents($eventName, Closure $c){
$this->events[$eventName] = $c;
}
public function call($eventName, $args = array()){
if (empty($args)){
$this->events[$eventName]();
}else {
call_user_func_array($this->events[$eventName], $args);
}
}
}
使用
$events = new Events();
$events->addEvents('event', function(){
echo 'hi';
});
$events->call('event');
here键盘测试链接
答案 3 :(得分:0)
只需编写常规命名函数?如果你想要一个固定的固定名称,这似乎是明显的答案。
如果您必须根据您的代码使其动态,但不能从您的控制之外进行更改,我建议将其放入类中。将实际变量设置为private,并为其提供公共getter,但不是setter。