0

そのクラスの静的関数と同じ名前のインスタンス関数を作成しようとすると、次のエラー メッセージが表示されます。

 Fatal error: Cannot redeclare Module::get_config() in [path]/static-redeclare.php on line 32

このテストに使用した完全なコードは、https ://gist.github.com/IQAndreas/ccaebe6d660a7248ca9e にあります。

このタイプのエラーは、Action Script 3 や Java などの他の言語では発生しません。どちらかの関数を間違って宣言していますか、それとも PHP はそのような「特別な」ものであり、スコープが異なる場合でも関数名の繰り返しを好まないのですか?

後者の場合、PHP が静的関数名とインスタンス関数名の衝突を防止する論理的な理由があるのでしょうか、それとも PHP 言語の作成者が気まぐれに決定したのでしょうか?

4

1 に答える 1

2

PHP はそのように (そして他の多くの点でも) 特別です。

歴史的に、PHP ではインスタンス メソッドを static 表記で呼び出すことが問題なく行われ、その逆も同様であったことを考えると、決定の理由はそのままにしておくのが最善です。

それは、「ユーザーはおそらく X を実行したいと思っていて、彼らが要求した Y との違いを知らないと推測できますが、判断するのは止めましょう。ただ X を実行してください」という友好的な PHP の精神で行われたと思います。

于 2014-08-21T14:26:42.203 に答える