父类中的代码:
foreach(static::$_aReadOnlyDatabaseTables AS $TableName => $aColumns){
// Do something
}
这在子类中定义$ _aReadOnlyDatabaseTables时有效,但在$ _aReadOnlyDatabaseTables不存在时抛出错误。我需要先检查这个属性是否存在。
我认为它应该是这样的:
if(property_exists(static,$_aReadOnlyDatabaseTables)){
foreach(static::$_aReadOnlyDatabaseTables AS $TableName => $aColumns){
// Do something
}
}
但这会引发语法错误unexpected ',', expecting T_PAAMAYIM_NEKUDOTAYIM
。使用$this
代替static
也不起作用,它总是评估为假。
这个的正确语法是什么?
答案 0 :(得分:9)
你应该试试这个:
if(property_exists(get_called_class(), '_aReadOnlyDatabaseTables')) {
foreach(static::$_aReadOnlyDatabaseTables AS $TableName => $aColumns){
// Do something
}
}
答案 1 :(得分:3)
正确的方法是在父类中使用合理的默认值(空数组)初始化值。这样你可以确定该属性将存在。
您在一个班级中访问的所有内容都应该在您自己使用该类时正确定义它。
答案 2 :(得分:0)
您应该可以使用get_class()
代替static
关键字快速而肮脏地执行此操作:
if (property_exists(get_class($this), '_aReadOnlyDatabaseTables')) { ... }