ホームページ  >  記事  >  バックエンド開発  >  php オブジェクト指向 (OOP) - 異なる php バージョンでの構築メソッドの継承と互換性

php オブジェクト指向 (OOP) - 異なる php バージョンでの構築メソッドの継承と互換性

WBOY
WBOYオリジナル
2016-08-08 09:23:201178ブラウズ

PHP4.xバージョン:

PHP 4.xのコンストラクタ名はクラス名と同じです。

サブクラスのコンストラクター名はサブクラス名と同じです(意味不明)。

親クラスのコンストラクターはサブクラスで自動的に実行されません。

サブクラスで親クラスのコンストラクターを実行するには、次のようなステートメントを実行する必要があります:

$this->[親クラスのコンストラクター名 ()]

class Base1 {
function base1 () {
echo 'これはbase1コンストラクトです';
}
}
class class1 extends base1 {
function class1() {
$this ->
echo 'this is class1 construction';
}
}
$c1 = new class1;

PHP5.x バージョン:

PHP5.0 以降では、クラスの機能が大幅に拡張されました。クラスのコンストラクターには、一律に __construct() という名前が付けられます。

サブクラスのコンストラクター名も __construct() です (これもナンセンスです)。

親クラスのコンストラクターがサブクラスで実行されるかどうかには、次の 2 つの状況があります:

1. サブクラスがコンストラクター __construct() を定義していない場合、親クラスのコンストラクターがデフォルトで継承されます。自動的に実行されます。

2. サブクラスがコンストラクター __construct() を定義している場合、コンストラクター関数名も __construct() であるため、サブクラスのコンストラクターは実際には親クラスのコンストラクターをオーバーライドします。このとき実行されるのはサブクラスのコンストラクタです。

現時点で、サブクラスで親クラスのコンストラクターを実行したい場合は、次のようなステートメントを実行する必要があります:

parent::__construct();

class base2 {
function __construct() {
echo 'これは Base2 コンストラクトです';
}
function __destruct() {}
}
class class2 extends Base2 {
function __construct() {
parent: :__construct();
echo 'this is class2 construction';
}
}

親::__construct() ステートメントは必ずしもサブクラスのコンストラクターに配置する必要はないことに注意してください。 。これをサブクラスのコンストラクターに配置すると、サブクラスがインスタンス化されるときに自動的に実行されるようになります。

PHP4.0 と 5.0 のクラス コンストラクター間の互換性の問題:

PHP5.0 以降では、バージョン 4.0 のコンストラクターの定義規則とも互換性があります。 4.0 コンストラクターと __construct() 関数の両方が定義されている場合は、__construct() 関数が優先されます。

クラスコードをPHP4.0と5.0の両方に互換させるには、次のメソッドを採用できます:

class class3 {
function __construct() //for PHP5.0
{
echo 'これは class2 コンストラクトです ';
}
function class3() //PHP4.0 の場合
{
$this ->construct();
}
}
$c3 = new class3;

上記の内容は「揚げピーナッツ」から引用しています 兄弟、共有してくれてありがとう。

上記では、PHP オブジェクト指向 (OOP) の継承と、さまざまな PHP バージョンの構築方法の互換性について、内容の側面も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

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