PHP中继承实例详解

小云云
发布: 2023-03-22 20:22:01
原创
1380 人浏览过

继承并不改变类的结构。而是表名了两个类之间存在着某种关系,使得其中的成员看起来像是在别的类中存在。

主要的语法流程是:但我们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/>";
?>
登录后复制

注意: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.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板