我想了解PHP ReflectionClass,但有一些麻煩。在文檔中列出了3個類的修飾符:隱式抽象,顯式抽象和最終分別具有常數值16,32和64。我想知道隱式和顯式抽象修飾符是如何工作的?什麼時候是一個PHP類的隱式抽象?什麼是ReflectionClass :: IS_IMPLICIT_ABSTRACT用於?
我試圖找出它的試驗和錯誤與幾個簡單的類和接口,並使用ReflectionClass :: getModifiers()方法來查看發生了什麼,但我不明白的getModifiers方法的結果。使用下面的接口從getModifiers結果爲int(144):
interface Animal {
public function isYellow();
}
$a = new ReflectionClass("Animal");
var_dump($a->getModifiers());
隨着修飾符常量是16,32和64分別我不明白是怎麼方法可以返回144呢?我是否誤解了某個位域是如何工作的,或者爲什麼我會得到這個結果?
更新:144位爲10010000,所以設置位是16和128.使接口隱含抽象。我想知道128是什麼意思?
我做了一些測試用類:
class Horse implements Animal {
public function hasTail() { return true; }
}
abstract class Predator implements Animal {
public function hasTeeth() { return true; }
}
abstract class Fish implements Animal {
public function isYellow() { return true; }
}
馬類會引發致命錯誤,但仍然定義的類。反射Horse並調用getModifiers會導致int(524304),其中隱式抽象位被設置。但是其他設置是什麼意思?
反映Predator類並調用getModifiers結果爲int(524336),其中設置了隱式和顯式抽象位。最後一個設置位與Horse類相同。
Fish類聲明爲抽象類,但沒有抽象方法。然後,getModifiers結果是int(524320),正如所期望的那樣,它具有顯式抽象位集合,但不包含隱式抽象位。
這實際上是有道理的,與內部修飾符,謝謝:)我也更新了我的問題與我從隱式與顯式抽象的更多測試中發現的。 – Silwing 2015-02-09 14:39:12