簡體   English   中英

如何聲明php變量是常量

[英]How to declare a php variable to be constant

我有一些閉包,我已經綁定了一些變量。

例如

$x = function() { echo "hi there"; };

我想確保$ x永遠不會無意中切換到其他值。 知道怎么做嗎?

我不能使用常量,因為它們只解析標量值。

這段代碼的目的是什么?

我的意思是,函數本身就是常量 ,因為它們不能被重新聲明 為什么不這樣做呢?

function x() { echo "hi there"; };

如果你在閉包中工作,你總是可以使用命名空間 ,所以你的函數不會遇到閉包之外的碰撞。

我不認為你能做到這一點:

  • 變量意味着改變它們的價值
  • 常量不能保持功能

但是我找到了一個解決方法,這是我想出的唯一一件事,不管它是否適合你: 使用類和它的__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

你也可以通過回聲或任何你想要的東西使它變得更加沉默。 這樣,您可以將一系列函數分組為類中的方法,並確保它們始終可訪問。

使用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');

這里是鍵盤測試鏈接

只寫一個常規的命名函數? 如果你想要一個固定的固定名稱,這似乎是明顯的答案。

如果你必須根據你的代碼讓它動態,但不能從你的控制之外改變它,我建議把它放到一個類中。 將實際變量設置為private,並為其提供公共getter,但不提供setter。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM