怎样去搞定PHP类的继承?(总结分享)

在之前的文章中给大家带来了《带你分清类中的构造函数与析构函数》,其中详细的给大家带来了再PHP的类中应该怎样去使用构造函数与析构函数,本篇我们继续来看一下PHP类的继承相关知识,希望对大家有帮助!

在之前的文章中给大家带来了《带你分清类中的构造函数与析构函数》,其中详细的给大家带来了再PHP的类中应该怎样去使用构造函数与析构函数,本篇我们继续来看一下PHP类的继承相关知识,希望对大家有帮助!

怎样去搞定PHP类的继承?(总结分享)

php入门到就业线上直播课:进入学习API 文档、设计、调试、自动化测试一体化协作工具:点击使用

在PHP的面向对象中,我们可以通过一个类来继承一个已有的类,被继承的类被称作父类或者基类,继承了父类的这个类叫做子类。其实子类可以理解为父类的一个拓展,子类可以增加父类之外的新功能。子类还能够继承父类的构造函数,当子类被实例化时,PHP会先调用子类中的构造函数,当子类没有的时候,才会去调用父类的构造函数。

extends继承关键字

在PHP中,我们通过extends关键字来实现类的继承。它的语法格式如下:

class 子类名 extends 父类名{
… …
}登录后复制

其中我们需要注意的是,一个类只能从另一个类中继承,但是一个类可以继承多个类。也就是一个子类只能有一个父类,但是一个父类可以有多个子类。

继承 public 成员

在PHP中,父类所有使用public修饰的成员都是可以被子类继承的。

接下来我们通过示例来看一下,示例如下:

demo();
$object2 = new son2();
$object2 -> demo();
?>登录后复制

输出结果:

怎样去搞定PHP类的继承?(总结分享)

在上述示例中,定义一个基类,使用另一类来继承这个基类,同时在尝试使用子类调用基类中的成员方法。结果父类所有使用public修饰的成员都是可以被子类继承的。

继承 protected 成员

上述中我们讲到了继承public修饰的成员,都可以被子类继承,还有一种protected成员,被它修饰的成员,就是属于不想被类的外部访问的,可以理解为通过修饰这个成员是一个保护成员,只能在类的内部被访问,同时也可以在子类的内部被访问,我们可以在子类设置一个成员函数来访问这个成员。

示例如下:

demo();
}
}
$object = new son1();
// $object -> demo(); // 在子类中调用父类使用 protected 修饰的成员方法会报错
$object2 = new son2();
$object2 -> test();
?>登录后复制

输出结果:

怎样去搞定PHP类的继承?(总结分享)

由上述示例我们能够看出,通过protected修饰的变量,也可以在继承后的子类内部被访问。

继承private 成员

在PHP类中,通过private修饰的成员,不能在类的外部被访问,也不能被子类访问,可以理解为这是private修饰成为了类私有的成员。准确来说,被private修饰的成员没有被子类继承,自然不能被子类访问。

示例如下:

demo();
}
}
$object = new son();
$object -> test();
?>登录后复制

输出结果错误,在子类中调用父类中使用 private 关键字修饰的成员时,程序会报错并终止运行。

大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

php是多继承还是单继承

原创2021-10-18 17:51:231437 + php学习QQ群(点击入群)

php是单继承。php是不支持多继承的,但是php可以通过使用interface或者trait实现多继承,如【interface test1 {public function connect();}interface test2 …】。

怎样去搞定PHP类的继承?(总结分享)

php入门到就业线上直播课:进入学习API 文档、设计、调试、自动化测试一体化协作工具:点击使用

本文操作环境:windows10系统、php 7、thinkpad t480电脑。

php是单继承还是多继承?可能你也被这个问题困惑很久了吧。首先,PHP是单继承,他是不支持多继承的。面向对象的特点是封装、继承、多态。这里的继承是指类与类之间的继承关系,可以使用关键字extends实现,这里只可以继承一个类。

那么,php是否可以实现多继承呢?答案是可以的。

php可以用两种方式实现多继承。一个是使用interface实现。还有一个就是使用trait实现。

第一种:关于使用interface实现,它的原理就是一个类可以实现多个接口,我们可以定义多个接口类,如下:

interface test1 {
public function connect();
}登录后复制interface test2 {
public function contact();
}登录后复制

一个类实现多个接口:

class MyClass implements test1,test2 {
public function connect() {
echo “test1”;
}
public function contact() {
echo “test2”;
}
}登录后复制

第二种:使用trait实现。其实trait并不算是多继承,应该叫做类似多继承的功能。

什么是trait呢?

答:看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,其作用有两个:表明类可以做什么;提供模块化实现。Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

//基本类
  class basicTest{
    public function test(){
      echo “hello,world\n”;
    }
  }

  //traitOne
  trait traitOne{
    public function test(){
      echo “this is trait one”;
    }
    public function testOne(){
      echo “one”;
    }
  }

  //traitTwo
  trait traitTwo{
    // public function test(){
      // echo “this is trait two!”;
    // }

    public function testTwo(){
      echo “Two”;
    }
  }

  //继承基本类,并use trait
  class myCode extends basicTest{
    use traitOne,traitTwo;
    public function test(){
      echo “hehaha!!”;
    }
  }

  $obj = new myCode();
  $obj->testTwo();登录后复制

注意:

优先级:自身方法>trait的方法>继承的方法(就是这样子的。)如果我们打开上述代码中的注释,会报错,因为两个trait中的方法重名了。

如何解决trait中方法重名的情况?

//使用demo1和demo2的方法,但并不是导入命名空间
//demo1和demo2种都有hello方法
use Demo1,Demo2{
//将Demo1的hello方法替换Demo2的hello方法
Demo1::hello insteadof Demo2;
//给Demo2的hello方法起别名
Demo2::hello as Demo2Hello;
}
//下方调用的时候
return $this->hello(); // 使用demo1的方法
return $this->Demo2Hello(); //使用demo2的方法登录后复制

推荐学习:php培训

以上就是php是多继承还是单继承的详细内容,更多请关注钦钦技术栈其它相关文章!

转载至:php中文网【www.php.cn】

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/27531/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年 9月 30日 3:51:39
下一篇 2022年 9月 30日 3:52:29

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!