PHP コンストラクターの理解

巴扎黑
リリース: 2016-11-23 11:35:47
オリジナル
1065 人が閲覧しました

プロジェクトの作業中にいくつかのエラーが発生しました。最終的には、PHP の構築メソッドが問題を引き起こしていました。
PHP5 以降では、オブジェクトの中で __construct コンストラクター メソッドを宣言できます。がインスタンス化されると、このメソッドが呼び出されます。
注意:
1. 継承されたサブクラスにコンストラクター メソッドがなく、親クラスにコンストラクター メソッドがある場合、サブクラスがインスタンス化されると、親クラスのコンストラクター メソッドが暗黙的に呼び出されます。
2. サブクラスにコンストラクターがあり、親クラスにもコンストラクターがある場合、サブクラスは明示的にparent::__construct()を呼び出して親クラスのコンストラクターにアクセスする必要があります。

下位互換性のため、php5 クラスに __construct() メソッドが見つからない場合は、クラス名と同じメソッド名のコンストラクターを探しますが、2 つのコンストラクターが同時に使用されると、E_STRICT レベルが低下する可能性があります。エラー メッセージ:
(次のコードは私の Web 環境です: win32+php5.3.8+apache2.2 テスト)

<?php
class B{
//构造器
public function B(){
echo &#39;this is B()&#39;;
}
public function __construct(){
echo &#39;this is __construct()&#39;;
}
public function other(){
//do something
}
}
$b = new B();
?>
ログイン後にコピー

結果: 厳格な標準: D:xampphtdocstest3Class.php の 8 行目でクラス B の既に定義されているコンストラクターを再定義します
これは __construct() です

しかし、メソッドの位置を変更するだけで結果は異なります:

<?php
class X{
//构造器
public function __construct(){
echo &#39;this is __construct()&#39;;
}
public function X(){
echo &#39;this is X()&#39;;
}
public function other(){
//do something
}
}
$x = new X();
?>
ログイン後にコピー

実際、php5.3.3 以降、クラスと同じ名前のメソッドはクラスとして使用されなくなりました。 php5.3.3 以降を使用している場合、クラスと同じ名前のメソッドをコンストラクターとして使用することはできません:

<?php
namespace Foo;
class Bar {
    public function Bar() {
        // PHP 5.3.0-5.3.2 是构造方法
        // PHP 5.3.3 被当做是正常的方法使用
    }
}
?>
ログイン後にコピー

2 つのコンストラクターを使用する必要がある場合同時に php5.3.3 以降では、次のようにすることができます:

<?php
class Y{
//构造器
public function __construct(){
self::Y();
}
public function Y(){
echo &#39;this is __construct() called Y()&#39;;
// do init
}
public function other(){
//do something
}
}
$y = new Y();
?>
ログイン後にコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!