ホームページ  >  記事  >  バックエンド開発  >  PHPの継承例を詳しく解説

PHPの継承例を詳しく解説

小云云
小云云オリジナル
2018-03-31 09:55:081330ブラウズ

継承によってクラスの構造は変更されません。代わりに、2 つのクラス間に特定の関係があることを示し、メンバーが他のクラスに存在するように見えます。

主な構文プロセスは次のとおりです: ただし、新しいオブジェクトを作成するときは、まずデータ領域にストレージ領域を開き、次にオブジェクトを初期化します。初期化中、変数またはメソッドはまずオブジェクトに対応するクラス空間で検索され、見つからない場合、継承関係があることが判明した場合は、その親クラスで検索されます。したがって、継承と呼ばれるものはクラスの構造を変更するものではなく、2 つの継承クラス間に継承関係を追加するだけです。 (例:書き換え操作:サブクラスと親クラスに同じメソッド名がある場合、関数を置換し、まず現在のオブジェクトの対応するクラスのメソッドを検索します。一度見つかった場合、検索は継続されません)この時点では、親クラスのメソッドがオーバーライドされたように見えます (これがオーバーライドの概念です)。

<?php
header("Content-Type:text/html;charset=utf-8");
Class A {
	public $p1=1;
	const c1=3;
	static $d1=5;
	private $e1=7;
	function f1(){
		echo "我是A中的方法!";
	}
}
Class B extends A{
	public $p2=2;
	const c2=4;
	static $d1=6;
	private $e2=8;
	function f1(){
		echo "我是B中的方法!".$this->e1;
		echo "我是B中的方法!".$this->e2;
	}
}
$o1=new B();
var_dump($o1);
echo "<br/>";
$o1->f1();
echo "<br/>";
A::f1();//此处不建议这么写,这是不严格的语法。
echo "<br/>";
?>

: var_dump($o1) には変数 e1 の値があり、「 ["e1":"A":private]=> int(7)」とマークされています。これは、Private プロパティを継承クラス B の変数 e1 と呼ぶこともでき、未定義の変数が表示されることを示しています。これは、静的変数は継承できますが、それが配置されているクラスのみがそれらを呼び出すことができることを示しています (サブクラスは継承できますが、呼び出すことはできません)。

<?php
	header("Content-Type:text/html;charset=utf-8");
	Class A {
		public $p1=1;
		const c1=3;
		static $d1=5;
		private $e1=7;
		function f1(){
			echo "我是A中的方法!".self::$d1;
		}
	}
	Class B extends A{
		public $p2=2;
		const c2=4;
		static $d2=6;
		private $e2=8;
		function f1(){
			echo "我是B中的方法!".self::$d1;
			//echo "我是B中的方法!".self::$d2;
		}
	}
	echo "<br/>";
	echo "类B中的静态属性d2:".B::$d2;
	echo "<br/>";
	echo "类B中能否继承父类A中的静态属性d1:".B::$d1;
	echo "<br/>";
	echo "类A中的静态属性d1:".A::$d1;
	echo "<br/>";
	echo "类A中能否访问子类B中的静态属性d2:".A::$d2;

このことから、サブクラスは親クラスの静的プロパティにアクセスできますが、親クラスはサブクラスの静的プロパティを取得できないことがわかります。システムは実行中に「ボトムアップ」の検索プロセスを実行するため、最初に現在のクラス内で検索が行われ、見つからない場合は、レイヤー (親クラス) 内で上方向に検索されます。親クラスは次のレベル (サブクラス) を検索できません。

注: 静的プロパティは、通常のプロパティとは異なり、オブジェクトのデータ空間に存在しません。

最後に、2 つの例から: 継承はクラスの構造を変更しません。それはオブジェクト内の親クラスに関するものです。また、親クラスから関数を呼び出すこともできます。 (簡単に言えば、オブジェクトが作成されると、保存できるデータの一部は、現在のオブジェクトによって作成されたデータ保存領域に保存されます。オブジェクトによる後続の操作の一部は、このデータ保存領域で実行されます。これは、オブジェクトと同じです)前にも書きましたが、クラスと直接の関係はありません。クラスが作成されると、外部から変更されることはありません。

以上がPHPの継承例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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