欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP中继承实例详解

程序员文章站 2022-04-08 17:04:01
...
继承并不改变类的结构。而是表名了两个类之间存在着某种关系,使得其中的成员看起来像是在别的类中存在。

主要的语法流程是:但我们new一个对象时,会在数据区先开辟一个存储空间,然后将对象进行初始化。初始化时,先是在其对象所对应的类空间去找变量或者方法,当无法找到时,如果发现其有一个继承关系,则会接着去它的父类中寻找。因此,我们所说的继承并不改变累的结构,仅仅是在两个继承类之间多了一个继承的关系。(比如说重写操作:当子类和父类中有相同的方法名是,掉用函数,先找的是当前对象对应类中的方法,当找到后就不会继续寻找了。这时,我们看上去像是父类中的方法被覆盖了,这就是重写的概念)。

<?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/>";
?>

PHP中继承实例详解

注意:var_dump($o1)中有变量e1的值,并且标明了“ ["e1":"A":private]=> int(7)”,这表明了私有属性也可以被继承类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;

PHP中继承实例详解

从中我们可以看出,子类中可以访问到父类中的静态属性,但是父类无法得到子类中的静态属性。因为系统在执行过程中是“从下至上”的查找过程,先从当前类中找,如果找不到,就向上以层(父类)查找。而父类不能向下一级(子类)查找。

注意:静态属性并不和普通的属性一样,存在于对象的数据空间中。

最后,从两个实例可得:继承并未改变其中类的任何结构。仅仅是对象中有了父类的一些东西。并且可以从父类中调用函数。(简单来说就是当创建对象时,一些能够存储的数据都会存储在当前对象所创建的数据存储区中,后面通过对象的一些操作都是在该数据存储区中进行的,与我们前面所写的类没有直接关系。类写好了后,不会从外部将其进行改变)。

以上就是PHP中继承实例详解的详细内容,更多请关注其它相关文章!

相关标签: php 详解 实例