查看父类中子类中是否存在静态属性(后期静态绑定)?

Nic*_*ick 6 php late-static-binding

父类中的代码:

foreach(static::$_aReadOnlyDatabaseTables AS $TableName => $aColumns){
  // Do something
}
Run Code Online (Sandbox Code Playgroud)

此工程时,$ _aReadOnlyDatabaseTables在子类中的定义,但在$ _aReadOnlyDatabaseTables不存在抛出一个错误.我需要先检查这个属性是否存在.

我认为它应该是这样的:

if(property_exists(static,$_aReadOnlyDatabaseTables)){
   foreach(static::$_aReadOnlyDatabaseTables AS $TableName => $aColumns){
      // Do something
   }
}
Run Code Online (Sandbox Code Playgroud)

但这会引发语法错误unexpected ',', expecting T_PAAMAYIM_NEKUDOTAYIM.使用$this代替static也不起作用,它总是评估错误.

这个的正确语法是什么?

Mat*_*ari 9

你应该试试这个:

if(property_exists(get_called_class(), '_aReadOnlyDatabaseTables')) {
   foreach(static::$_aReadOnlyDatabaseTables AS $TableName => $aColumns){
      // Do something
   }
}
Run Code Online (Sandbox Code Playgroud)

  • @Nick在父类中声明数组并在子类中覆盖它可能会更快更有效.然后你可以跳过房产检查.覆盖将在编译时完成一次,并且每次调用该方法时都不会产生额外的开销. (3认同)