2016-01-13 144 views
4

我試圖創建一個特性來製作「可凍結值對象」。 (爲了避免位置參數和伸縮構造函數)。這意味着setters可以用來初始化對象,然後調用->freeze(),這使得對象「不可變」。二傳手仍然會在那裏,但是當被召喚時,他們會拋出異常。這可以通過在每個設置者開始時撥打$this->assertIsWritable();來實現。不過,我想避免這種情況(因爲它很容易忘記這樣的呼叫),並自動進行檢查。有沒有辦法攔截調用定義的方法?攔截調用定義的PHP方法

在溶液不接受:

  • 接近於打破類型提示和/或靜態代碼分析在特殊的PHP擴展
  • 依賴

我使用PHP 7.0。

+1

東西可能?可能[ 'method_redefine'](http://php.net/manual/en/function.runkit-method-redefine.php)。我不知道你有什麼辦法可以做到這一點。 –

回答

1

這是不可能的,而不(使用流封包魔法)修改所述運行時(使用附加信息如Runkituopz或它被加載,而在PHP代碼執行源代碼轉換。在runkit