Parent 关键字|学习笔记

简介: 快速学习 Parent 关键字

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第二阶段Parent 关键字】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/712/detail/12694


Parent 关键字


主要内容:

一、概念

二、步骤

三、示例

 

可以重写子类和重写父类,重写了父类后发现子类只会调用自己的想让父类被重写后能够再次被访问的方式就要用到 parent 关键字,所有本章的目标就是理解重写后的访问原理实现 parent 实现被重写的父类成员的访问。一般情况下,成员属性被重写后就会被覆盖。

 

一、概念

1.Parent 关键字是一种明确访问父类成员的表达方式,parent 关键字用于再被重写的子类方法中居多,明确访问父类被重写成员。

2.Parent 可以访问父类静态属性、静态方法、类常量和普通方法

3.parent 使用范围解析操作符访问,前面有讲过解析操作符。Parent 可以访问类,但访问的是父类。

 

二、步骤

1.子类继承父类

2.子类重写父类方法

3.子类重写的方法还需要用到父类的方法,发现方法不够就要把父类方法拿过来,明确需要访问的父类成员

4.使用 parent 访问父类方法。

 

三、示例

来看例子,目前有一个需求,父类为数据库初始化类,数据库初始化类就是数据库已经做好了,子类为针对表的业务类,每张表就对应一个类,一个类就负责这张表的增删改查。子类继承父类,但是子类可能也有资源要初始化,需要重写父类的构造方法,但是一旦重写父类,父类的构造方法就不会改变,那父类数据库的初始化就做不了了。

比如说现在有一个DB 类,这是数据库初始化类,link属性直接初始化,然后加上一个 echo 证明他的存在。然后一个子类叫 table 类去继承父类,它也有自己的构造方法,但是他必须要让前一个构造方法执行,要让两个构造方法连接,此时要用到 parent 关键字。

代码如下

<?php

#Parent 关键字

class DB{

protected Slink;

public function construct(){

Sthis->1ink = mysq1i_connect(localhost""root'root''db_2'3306') or die('数据

库连接失败!');

echo_METHOD_

class Table extends DB{

# 重写父类方法

public function_construct(){

#让父类构造方法先执行

parent::__construct();

# 执行其他

Echo METHOD:

父类有了,子类也有了,重写了父类的构造方法,这也就意味着,把它实实例。可以看到table 的可以调用,而父类的永远无法调用,因为这个方法被子类已经重写过了,所有子类调用时都调用的子类的构造方法。此时如果要操作数据库,因为没有初始化,所有操作不了,这时使用parent 关键字,先执行父类的构造方法,再执行子类的构造方法,不会凌驾于父类的操作之上。一般父类的构造方法能提供资源才会用 parent ,如果不能则不需要用,这就是parent 的作用。

静态属性重写后,需要再自爱中进行访问需要用到 parent 来实现,因为重写的时候并没有覆盖之前的属性,在这加上 public statia ¥level=1,再加上 public statia ¥level=2,如果要用, 再增加一个方法,#访问父类的静态成员,前提是被重写,echo self 类名假 level2,发现确实访问的是自己的self,那如果访问的是父类,拿在这里加上一个parent,那么此时得到的是1,访问的是父类的,所有凡是被重写的成员,都可以使用 parent 进行访问。

做个小结,如果不想要访问父类的构造就不需要重写,如果要在普通的方法里面访问父类也可以,但是不符合业务,parent 的加之就是解决重写冲突的问题,一般只会在重写的方法里面使用 parent,parent 也可以访问静态的属性,可以重写,但不会被覆盖,但是不能用于访问父类的属性,因为父类的属性被重写后会被覆盖,就不存在了,普通的就直接使用就行,不需要使用 parent 关键字,使用的是范围使用操作解析,它更偏向于方法和类的调用,而不是对象的属性。

相关文章
|
5月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
483 0
|
Android开发 Swift iOS开发
探索iOS与安卓应用开发的异同点
【8月更文挑战第5天】在移动应用开发领域,iOS和安卓两大平台各自拥有独特的生态系统和技术架构。本文将深入探讨这两个平台在开发环境、编程语言、用户界面设计、应用分发以及安全性方面的不同之处。通过比较分析,我们将揭示每个平台的优势和挑战,为开发者在选择适合自己项目需求的平台时提供参考。
|
11月前
|
敏捷开发 监控 数据可视化
作为 J 人,如何挑选适合金融团队的办公软件?
新年钟声敲响,金融行业迎来新的征程。投资、风控和客户服务团队需紧密协作,高效应对市场变化。具备J人特质的金融从业者注重规划与效率,高效的团队协作至关重要。选对办公软件是提升协作效率的关键。本文深入剖析六款可视化团队协作办公软件:板栗看板、Trello、Asana、Monday.com、Jira和Airtable,为J人主导的金融团队提供全面选型指南。其中,板栗看板以卓越的任务可视化管理、灵活自定义工作流及无缝实时沟通脱颖而出,助力团队在复杂多变的金融市场中高效运作,取得优异成绩。
146 0
|
程序员 C语言
【C语言】while循环语句
【C语言】while循环语句
1566 3
|
负载均衡 Cloud Native 容灾
阿里云负载均衡SLB价格_ALB、NLB和CLB区别_负载均衡功能和使用场景说明
阿里云负载均衡SLB分为应用型ALB、网络型NLB及传统型CLB。ALB与NLB仅支持按量付费,而CLB则提供包年包月和按量付费选项。ALB专长于7层HTTP/HTTPS/QUIC协议处理,支持丰富的内容路由功能;NLB聚焦于4层TCP/UDP/TCPSSL协议,擅长处理大规模并发连接。两者均基于NFV技术,支持自动弹性伸缩,并与云原生环境如ACK/SAE/K8S深度集成。此外,SLB提供多协议支持、多级容灾、安全防护等功能,确保服务的高可用性和安全性。具体收费方面,ALB的基础版实例费为0.049元/小时起,NLB实例费限时免费,两者还需支付性能容量单位LCU费及公网网络费(仅公网实例)
STM32CubeMX配置时钟无法使用高速外部时钟HSE
STM32CubeMX配置时钟无法使用高速外部时钟HSE
1008 0
|
缓存 Ubuntu 编译器
CMake 常见问题及解决办法
CMake 常见问题及解决办法
6040 0
|
机器学习/深度学习 人工智能 前端开发
【前端】JavaScript简介
【前端】JavaScript简介
146 0
|
Java Windows
Windows 安装 JDK 8 和 JDK 17 和多版本JDK切换
Windows 安装 JDK 8 和 JDK 17 和多版本JDK切换
|
Java Windows
JDK17 || JDK 8 完美 卸载 教程 (Windows版) 完整指南:卸载JDK17和JDK8,并安装新版JDK
JDK17 || JDK 8 完美 卸载 教程 (Windows版) 完整指南:卸载JDK17和JDK8,并安装新版JDK
4827 0