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ても機能せず、常に false と評価されます。

これの適切な構文は何ですか?

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

正しい方法は、親クラスの適切なデフォルト値 (空の配列) で値を初期化することです。そうすれば、プロパティが存在することを確認できます。

クラスを単独で使用する場合は、クラスを適切に定義することにより、1 つのクラスでアクセスするすべてのものを使用できるようにする必要があります。

于 2013-03-18T17:35:43.943 に答える
0

キーワードget_class()の代わりに使用して、これをすばやく行うことができるはずです。static

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