6

父类中的代码:

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也不起作用,它总是评估为假。

什么是正确的语法?

4

3 回答 3

9

你应该试试这个:

if(property_exists(get_called_class(), '_aReadOnlyDatabaseTables')) {
   foreach(static::$_aReadOnlyDatabaseTables AS $TableName => $aColumns){
      // Do something
   }
}
于 2013-03-18T17:36:15.187 回答
3

正确的方法是在父类中使用合理的默认值(空数组)初始化值。这样您就可以确定该属性将存在。

当您单独使用该类时,通过正确定义它,您在一个类中访问的所有内容都应该可用。

于 2013-03-18T17:35:43.943 回答
0

您应该能够使用get_class()而不是static关键字来快速而肮脏地执行此操作:

if (property_exists(get_class($this), '_aReadOnlyDatabaseTables')) { ... }
于 2013-03-18T17:35:57.437 回答