ホームページ >バックエンド開発 >PHPチュートリアル >php7のコンストラクタの詳しい説明

php7のコンストラクタの詳しい説明

黄舟
黄舟オリジナル
2017-07-02 09:51:194035ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。