类的基础定义和概念(扩展2)
关于继承
1.继承是从一个基类得到一个或多个派生类的机制
2.继承自另外一个类的类被称为该类的子类,这种关系通常用父子关系描述,子类将继承父类的特效,这些特性由属性和方法组成。
(父类也可以叫超类,基类,子类也被称为父类的扩展)
3.派生类可以扩展和修改父类的功能
< ?php class ShopProduct{ function getSummaryLine() { echo 'i am father\'s getSummaryLine function '."\n"; } } class Cdproduct extends ShopProduct{ function getSummaryLine() { echo 'i am son\'s getSummaryLine function'."\n"; } } $product1 = new ShopProduct(); $product2 = new Cdproduct(); $product1->getSummaryLine(); echo "-------------\n"; $product2->getSummaryLine();?>
输出结果:
i am father's getSummaryLine function -------------i am son's getSummaryLine function //变了
4.要引用一个类而不是对象的方法,可使用::而不是->。
5.在子类中定义构造方法时,需要传递参数给父类的构造方法,否则你得到的可能是一个不完整的对象.
需要使用 parent::__construct()
< ?php class ShopProduct{ public $title; function __construct($title) { //父类的构造方法,这里看到需要传入一个参数$title //————第四步 $this->title = $title; echo 'i am father\'s construct and title is'.$title."\n"; } function getSummaryLine() { echo 'i am father\'s getSummaryLine function '."\n"; } } class Cdproduct extends ShopProduct{ public $sonTitle; function __construct($title,$sonTitle) { //子类的构造方法,这里添加一个新的参数$sonTitle //————第二步 parent::__construct($title); //这里就是调用父类的构造方法,因为父类的构造方法是只有一个参数$title,所以只需要传入一个 //————第三步 $this->sonTitle = $sonTitle; //这个就是子类自己的构造方法想增加的一个属性 //上面这几行加起来的意思就是子类需要父类的构造方法,并且在父类的构造方法的基础(获得了父类的$title)上增加一个子类自己的属性($sonTitle) echo 'i am son\'s construct and title is'.sonTitle."\n"; } function getSummaryLine() { echo 'i am son\'s getSummaryLine function'."\n"; } } $product1 = new ShopProduct('TTTTitle'); echo "-------------\n"; $product2 = new Cdproduct('TTTitle2222','dasdsada'); //————第一步(如果单单看Cdproduct这个子类的实例化的过程的话,就是四步) echo "-------------\n"; $product1->getSummaryLine(); echo "-------------\n"; $product2->getSummaryLine();?>
输出结果是
i am father's construct and title isTTTTitle-------------i am father's construct and title isTTTitle2222i am son's construct and title issonTitle-------------i am father's getSummaryLine function -------------i am son's getSummaryLine function
每个子类都会在设置自己的属性前调用父类的构造方法。父类仅需要知道自己的数据。我们应该避免告诉父类任何关于子类的消息,这是一条经验规则。(其实也就是在面向对象开发中,“专注特定任务,忽略外界上下文”)
6.public,private,protected-可见性关键字允许我们只公开类中客户需要的部分,这给对象设置一个清晰的接口。
public 会全部开放,private只给当前类调用,protected可以给当前类和子类调用,安全等级是public < protected < private(我们倾向于严格控制可访问性)
6.1访问方法
基于安全性考虑,严格控制可访问性,所以有一种方法可以实现
class ShopProduct{ private $title; //因为设置了private,不是当前类是没办法访问这个属性 public function getTitle(){ //但是我们又要访问这个属性,所以设置了公用方法来访问,我们可以在这个方法里面加一些过滤和判断,提高进一步的可访问性。 return $this->title; } public function setTitle(){ //这是set的方式,当然不能很简单的就set了,要增加相关的过滤性操作。 return $this->title = 'hahahhah'; } }

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸
