ホームページ >バックエンド開発 >PHPチュートリアル >php7のコンストラクタの詳しい説明
php7 で開発しているときに、次のような問題に遭遇しました:
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; index has a deprecated constructorこのプロンプトは正常で、理解しやすいようです。また、これは php7、つまり php7 のクラスを紹介する多くの記事で言及されています。このプロンプトは、
コンストラクターとして同名の関数を使用する コンストラクターとしてはconstructを使用することを推奨します ecshopなどのコードではクラスと同名の関数をコンストラクターとして使用するケースが多くあります。 しかし、thinkphp の
controllerにはインデックス コントローラー内にまだインデックス メソッドがあることがわかり、それを使用するときにこのプロンプトがスローされることはわかりませんでした。 それで私はコードを調べましたが、データとテストからいくつかの状況があることがわかりました:
1. クラス名と同じ名前の構造体 (非親クラス) と関数の両方がある場合。クラス内では、construct がコンストラクターであり、同じ名前の関数は通常の関数として扱われます
2. サブクラスの親クラスにはコンストラクトがあり、サブクラスにはコンストラクトが存在しない場合。サブクラス内に同名の関数があり、その同名の関数がコンストラクタです。 get_class_methods($this); を使用してクラスのメソッドを取得すると、実際には構築メソッドがあることがわかります。
3.php の公式マニュアルには次の文があります。 ,
namespace内で、クラス名と同じ名前のメソッドはコンストラクターではなくなります。この変更は、名前空間にないクラスには影響しません。通常、thinkphp のソース コードを見ると、名前空間は使用されません。これは、常に最初の 2 つの状況のままです。不快な。
幸いなことに、私は公式 PHP マニュアルで 3 番目の状況を見つけ、thinkphp には名前空間が使用されているため、thinkphp にそのようなプロンプトがない理由を最終的に理解しました。
以上がphp7のコンストラクタの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。