我有一些關閉,我已經綁定了一些變量。如何聲明一個php變量爲常量
例如
$x = function() { echo "hi there"; };
我想確保$ x永遠不會無意中切換到其他值。任何想法如何做到這一點?
我不能使用常量,因爲它們只解析爲標量值。
我有一些關閉,我已經綁定了一些變量。如何聲明一個php變量爲常量
例如
$x = function() { echo "hi there"; };
我想確保$ x永遠不會無意中切換到其他值。任何想法如何做到這一點?
我不能使用常量,因爲它們只解析爲標量值。
這段代碼的目的是什麼?
我的意思是,功能是常量自己,因爲他們不能重新申報。那麼爲什麼不這樣做呢?
function x() { echo "hi there"; };
如果你是在一個封閉的工作,你總是可以使用一個namespace,所以你的函數不會關閉的一個碰撞外見面。
只需編寫一個常規的命名函數?如果你想要一個固定的名字,這似乎是一個明顯的答案。
如果您絕對必須根據您的代碼使其具有動態性,但不能從您的控制之外更改,我建議將它放入課程中。將實際變量設置爲private,併爲其提供公共getter,但不是setter。
我不認爲你可以做到這一點爲:
但我想出了一個解決辦法,是我想出的唯一的東西,不知道它是否適合你: 使用類而且它的__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";
當您嘗試分配「你好」 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
您也可以使它更安靜正是這樣做你想做的回聲或。通過這種方式,您可以將一系列函數組合爲課程中的方法,並確保它們始終可訪問。
與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鍵盤測試環節