2014-01-29 16 views
0

我試圖讓這個豆蔻示範運行,但我不斷收到一個普通字符串PHP:是否有可能在異常拋出中調用公共類函數?

"getConfiguration:Name (self::getName())is not supported" 

(使用自::時的getName())

或錯誤messege:

PHP Notice: Undefined property: Demo::$getName 

(使用$這個 - 當>的getName())

這是我的代碼:

class Demo { 
     protected $name = "demo"; 

     public function __construct() { 
      try { 
       if(true) { 
        throw new Exception("Name (self::getName())" . 
             "is not supported"); 
       } 
      } catch(Exception $e){ 
      echo $e->getMessage(); exit; 
      } 
     } 

     public function getName() { 
      return $this->demo; 
     } 
    } 

現在這是根本不可能或者我在這裏做錯了什麼?

編輯:

在此之前,我得到這個工作與$this->name,但我寧願用一個函數,如果有可能,而不是莫名其妙一個非常糟糕的主意。

+0

你不能做到這一點異常,但你可以通過register_shut_down功能 – Sundar

+1

你任何錯誤做到這一點得到一個純字符串,因爲你用try/catch捕獲異常,然後用'echo'將它降級到字符串。你想通過觸發異常並立即取消它來完成什麼? –

+0

他是對的。要麼只是拋出異常,讓它由任何錯誤處理程序處理,或者只是回顯並退出。 – ToBe

回答

1

您正在靜態調用一個不是靜態的函數。引用$這可能在建構者內部也是有問題的,特別是如果失敗的話。

您還應該更改您的Exception以使其不包含字符串內的調用。

throw new Exception("Name (".self::getName().") is not supported"); 

將您的方法更改爲靜態訪問。你也必須讓你的變量$演示靜態:

protected static $name; 

    public static function getName() { 
     return self::$name; 
    } 

拋出異常只是爲了得到迴音犯規做出多大意義。您應該只是附和你的錯誤並退出或拋出一個異常:

public function __construct() { 
     throw new Exception("Name (".self::getName().") is not supported"); 
    } 

OR

public function __construct() { 
     echo "Name (".self::getName().") is not supported"; 
     exit; 
    } 
+0

它會拋出這樣的錯誤:'使用$ this,而不是在對象上下文' – popi

+0

改變它也是靜態的。 – ToBe

+0

好的,我現在看到:) – popi

相關問題