kod w klasie nadrzędnej:Sprawdź, czy istnieje własność statyczna w klasie potomnej z klasy nadrzędnej (późne wiązanie statyczne)?
foreach(static::$_aReadOnlyDatabaseTables AS $TableName => $aColumns){
// Do something
}
To działa, gdy $ _aReadOnlyDatabaseTables jest zdefiniowana w klasie dziecka, ale zgłasza błąd podczas $ _aReadOnlyDatabaseTables jest nieobecny. Muszę sprawdzić, czy ta właściwość istnieje wcześniej.
myślę, że powinno iść tak:
if(property_exists(static,$_aReadOnlyDatabaseTables)){
foreach(static::$_aReadOnlyDatabaseTables AS $TableName => $aColumns){
// Do something
}
}
Ale to generuje błąd składni, unexpected ',', expecting T_PAAMAYIM_NEKUDOTAYIM
. Używanie $this
w miejsce static
również nie działa, zawsze zwraca wartość false.
Jaka jest prawidłowa składnia tego?
Tak można to zrobić w przypadku późnych wiązań statycznych. – nickb
@Nick Prawdopodobnie szybsze i bardziej wydajne byłoby zadeklarowanie tablicy w klasie nadrzędnej i nadpisanie jej w elementach potomnych. Następnie możesz pominąć sprawdzanie właściwości. Zastąpienie zostanie wykonane raz podczas kompilacji i nie będzie powodowało dodatkowego obciążenia za każdym razem, gdy metoda zostanie wywołana. –
@ColinMorelli, dziękuję, zrobię to również, ale moim celem na razie było wykrycie jakichkolwiek klas dzieci, w których ta właściwość nie została jeszcze zaimplementowana. – Nick