2012-06-15 92 views
1

有沒有聽被重寫變量的方式...PHP聽VAR覆蓋

一個虛構的例子:

<?php 


$user = new user_class(); 
function callback_foo(){ 
    die('Do not override this variable you are not permited...'); 
} 
listen_var_change('user','callback_foo'); 

?> 

我希望上面的代碼會解釋什麼,我想要做的,我只是想確保var是恆定的。 我不能使用define()它是不會允許對象|陣列

乾杯。

回答

1

PHP中沒有這樣的機制。最接近你可以爲班級成員工作,並涉及魔術獲得者和制定者。例:

<?php 

class Foobar { 
    private $user; 

    public function __construct($user) { 
     $this->user = $user; 
    } 

    public function __set($key, $val) { 
     if ($key === 'user') { 
      die("Do not change this value, or a fluffy kitty dies."); 
     } 
    } 

    public function __get($key) { 
     if ($key === 'user') { 
      return $this->user; 
     } 
    } 
} 

這是非常如何你會在PHP中實現只讀屬性(儘管你可能要拋出一個開捕例外,而不是die,使用戶代碼可以正常恢復

+0

我一年前看過這個,但我認爲這樣做,它只是'foobar'應儘可能短,我會嘗試一些事情和儘快給您回覆 :) – Val

0

你的建議是不可能的。如果你想擁有一個「一成不變」的價值,一個可行的解決方案是隱藏其背後一個getter函數:

function getUser() { 
    static $user; 
    if (!$user) $user = new user_class(); 
    return $user; 
} 

當然,這是不是一個好的做法,但它並不比有global $user更糟。

+0

我看看你的意思,但是...多數民衆贊成在很好:( – Val