php对象继承(php 继承)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
今天给各位分享php对象继承的知识,其中也会对php 继承进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
- 1、php继承一个父类,如何自动执行父类方法
- 2、PHP 继承、封装、多态
- 3、PHP继承的问题,调用父类的方法this指向问题。
- 4、PHP类继承的问题,子类继承父类,实例化子类,先执行父类还是先执行子类?
- 5、在PHP里,子类是不是可以继承父类的私有属性,但不能访问啊?
- 6、php中怎么判断某个类或对象继承于哪个父类
php继承一个父类,如何自动执行父类方法
你在父类写一个成员函数 然后子类继承 创建子类对象的时候 可以点出来父类的成员函数
比如
Student zs = new Student();
zs.SayHello() //点出来的是从父类的继承来的成员函数
输出结果为父类的-我是人类
public class Person
{
public void SayHello() //这只是父类的SayHello
{
echo"我是人类";
}
}
public class Student:Person //已经继承了Person父类
{
//我什么都没写
}

PHP 继承、封装、多态
-子类只能继承父类的非私有属性
-子类继承父类后,相当于将父类的属性和方法copy到子类,可以直接使用$this调用该属性;
-php只能单继承,不支持一个类继承多个类。但是一个类可以进行多层继承
类实现封装是为了不让外面的类随意修改一个类的成员变量,所以在定义一个类的成员的时候,我们使用private关键字设置这个成员的访问权限只能被这个类的其他成员方法调用,而不能被其他类中的方法调用,即通过本类中提供的方法来访问本类中的私有属性
-所以在该类中我们会提供一个访问私有属性的方法
-然后我们一般会定义两个方法来实现对一个变量的操作,即__get()和__set()方法
一个类被多个子类继承,如果这个类的某个方法,在多个子类中,表现出不同的功能,我们称这种行为为多态(同一个类的不同子类表现出不同的形态)
-子类继承父类-子类重写父类的方法-父类引用指向子类对象
PHP继承的问题,调用父类的方法this指向问题。
我来说一说:
【一】…………public(仅有)属性和方法的继承…………
class a{
public $var = 'var a br/';
public function m(){
echo 'fun a br/';
}
public function run(){
echo $this-var;
$this-m();
}
}
class b extends a{
public $var = 'var b br/';
public function m(){
echo 'fun b br/';
}
}
$li = new b();
$li-run();
echo 'hr';
var_dump($li);
输出:
var b
fun b
————————————————————————————
object(b)[1]
public 'var' = string 'var b br/' (length=11)
在这段代码中所表示的,是我们常见的一种继承方式,同为公有属性的$var 和公有方法m()
在这里,$var和m()都被继承并覆写,实例化过后,内存中只有一个$var实例,通过var_dump($li);我们可以看到它。
【二】…………private(私有)属性和方法的继承…………
class a{
private $var = 'var a br/';
private function m(){
echo 'fun a br/';
}
public function run(){
echo $this-var;
$this-m();
var_dump($this);
echo 'br/br/';
}
}
class b extends a{
private $var = 'var b br/';
private function m(){
echo 'fun b br/';
}
public function run(){
echo $this-var;
$this-m();
var_dump($this);
echo 'br/br/';
parent::run();
}
}
$li = new b();
$li-run();
echo 'hr';
var_dump($li);
输出:
var b
fun b
object(b)[1]
private 'var' = string 'var b br/' (length=11)
private 'var' (a) = string 'var a br/' (length=11)
.
.
var a
fun a
object(b)[1]
private 'var' = string 'var b br/' (length=11)
private 'var' (a) = string 'var a br/' (length=11)
.
————————————————————————————————
object(b)[1]
private 'var' = string 'var b br/' (length=11)
private 'var' (a) = string 'var a br/' (length=11)
这个时候,我们可以看到,在调用run方法时,首先它会调用到b类的私有属性$var 和私有方法m(),随后,又使用parent::run()调用父类的run()方法,我们可以看到,父类的run()方法调用后,它所调用的属性和方法,都是a类的两个私有属性和方法,这种形式,和你的问题一致;
而它与$this指向无关,我们可以在这里看到,两个$this都是指向b类。
而最有意思的是,在$li句柄中,我们却看到了两个属性!一个是b类的属性,一个是a类的属性,这两个属性同时存在着,那么,私有方法也自然是同时存在着。
【三】…………私有属性和方法能不能被继承…………
class a{
private $var = 'var a br/';
private function m(){
echo 'fun a br/';
}
}
class b extends a{
public function run(){
echo $this-var;
$this-m();
}
}
$li = new b();
$li-run();
输出:
Notice: Undefined property: b::$var in E: ... on Line 9
Fatal error: Call to private method a::m() from context 'b' in E: ... on Line 10
这可以证明,私有属性和方法,无法被继承,所以,你的代码示例中所说,将a类的m()方法更改为private后,会显示aa的属性,也就可以理解明白了。
PHP类继承的问题,子类继承父类,实例化子类,先执行父类还是先执行子类?
不是这个意思。所谓“实例化子类的对象前要先实例化父类中的内容,为父类初始化”,是指当子类正在实例化时,总是链式调用父类构造方法初始化父类空间。换句话说,子类的构造方法必须先调用父类的构造方法,完了才能干别的初始化工作。如果子类没有显式调用语句,编译器会隐式帮你加上。
如:
public class A{ public A() { }}public class B extends A{ public B() { }}等价于:
public class A{ public A() { super();//这里实际上是Object(); //其他初始化工作 }}public class B extends A{ public B() { super();//这里实际上是A(); //其他初始化工作 }}另外,如果有这种情况:
public class A{ X x=new X(); public A() { }}public class B extends A{ Y y=new Y(); public B() {//这是类A空间里的字段都已经初始化完毕。 }}在成员y被赋值之前,x一定已经存在。换句话说,X x=new X();一定先于Y y=new Y();执行。
在PHP里,子类是不是可以继承父类的私有属性,但不能访问啊?
用print_r来检测一下这个对象
注释掉的时候
print_r($s1);
Student Object
(
[name:Person:private] = ys
)
告诉我们name是Person类私有的属性
当没注释掉的时候
print_r($s1);
Student Object
(
[name:Person:private] = ys
[name] = 子类
)
告诉我们name是Person类私有的属性,有给Student类添加了一个name属性
我们还注释掉,再修改如下
$s1 = new Student();
$s1-name = '子类'; //添加一个属性为name
$s1-say();
跟上面一样的结果
从这些调试结果分析,继承跟访问可以这样说是一个概念,私有不可以继承过来。
你继承的时候加的那个$this-name是又新添加了一个name属性,跟父类的name属性无关
php中怎么判断某个类或对象继承于哪个父类
?php
class A{
public function show(){
echo '调用方法';
}
}
class B extends A{
}
$b = new B();
$b-show();
php对象继承的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于php 继承、php对象继承的信息别忘了在本站进行查找喔。
