百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

PHP面向对象编程(二)

bigegpt 2024-09-01 15:20 9 浏览

本文章为连载文章PHP面向对象的第二篇

建议先阅读前篇文章:PHP面向对象编程(一)

继承

基本概念

将一个类A中的特性信息,传递到另一个类B中,此时就称为:

B继承A

A派生出B;

基本语法:

几个基本概念

继承:一个类从另一个已有的类获得其特性,称为继承。

派生:从一个已有的类产生一个新的类,称为派生。

父类/子类:已有类为父类,新建类为子类。父类又可以称为“基类”,上级类,子类又称为派生类,下级类,

单继承:一个类只能从一个上级类继承其特性信息。PHP和大多数面向对象的语言都是单继承模式。C++是多继承。

扩展:在子类中再来定义自己的一些新的特有的特性信息(属性,方法和常量)。没有扩展,继承也就没有意义了。

访问控制修饰符

形式:

class 类名{

访问控制修饰符 属性或方法定义;

}

有3个访问修饰符:

public公共的:在所有位置都可访问(使用)。

protected受保护的:只能再该类内部和该类的子类或父类中访问(使用)。

private私有的:只能在该类内部访问(使用)。

他们的作用是:用来“限制”其所修饰的成员的“可访问性”;

可访问性:

就是在代码中使用这样两种语法形式的“有效性”(合法性):

对象->实例属性或方法;

类::静态属性或方法;

访问控制修饰符,需要结合使用该语法形式的所在位置,才能确定是否可访问。

有3个访问位置(范围):

某个类的内部:

某个类的继承类的内部:

某个类的外部:

则,他们结合起来的可访问性如下:

类内部继承关系类内部类外部
publicYesYesYes
protectedYesYesNo
privateYesNoNo

总结说明:

1,public修饰的成员,哪里都能访问;

2,类的内部,可以访问任何级别的成员;

3,public具有最宽泛的可访问性;private具有最狭小的可访问性;protecte则居中;

parent关键词

parent表示“父母”的意思,在面向对象语法中,代表“父类”

——本质上就是代表父类这个“类”,而不是父类的“对象”;

其使用方式为:

parent::属性或方法; //通常是静态属性或静态方法,但有时候可能是实例属性或实例方法;

对比相关的2个词:

关键字含义使用位置:使用示例
parent:代表父类(这个类)肯定在一个方法中parent::属性或方法;
self:代表当前其所在的类肯定在一个方法中self::静态属性或方法;
$this:代表调用当前方法的对象肯定在一个方法中$this->实例属性或方法;

构造方法和析构方法调用上级同类方法的问题

1,如果一个类 有 构造方法,则实例化这个类的时候,就 不会 调用父类的构造方法(如果有);

2,如果一个类没有构造方法,则实例化这个类的时候,就会自动调用父类的构造方法(如果有);

3,如果一个类 有 析构方法,则销毁这个类的时候,就 不会 调用父类的析构方法(如果有);

4,如果一个类没有析构方法,则销毁这个类的时候,就会自动调用父类的析构方法(如果有);

5,如果一个类中有构造方法或析构方法,则就可以去“手动”调用父类的同类方法(如果有);

手动调用的语法形式总是这样:

parent::构造方法或析构方法()

则,第5种情况,parent在构造方法中的一个典型代码(写法):

(在子类的构造方法中,常常需要去调用父类的构造方法,以简化对象的初始化工作。)

覆盖(override):

基本概念

覆盖,又叫“重写”:

含义:

将一个类从父类中继承过来的属性和方法“重新定义”——此时相当于子类不想用父类的该属性或方法,而是想要定义。

覆盖的现实需要:

对于一个父类,或许其属性的现有数据(值),子类觉得不合适,而需要有自己的新的描述;

或许其方法,子类觉得也不合适,需要自己来重新定义该方法中要做到事。

此时就可以使用覆盖。

重写的基本要求:

访问控制权限:

子类覆盖的属性或方法的访问控制权限,不能“低于”父类的被覆盖的属性或方法的访问控制权限:

具体来说:

父类: public 子类:只能是public

父类: protected 子类:可以说protected和public

父类: private 子类:不能覆盖!——既父类的私有成员,不存在被子类覆盖的可能。

方法的参数形式:

子类覆盖父类的同名方法的时候,参数要求跟父类保持一致;

特例:

构造方法重写的时候参数可以不一致

小注意:

虽然父类的私有属性不能被覆盖,但子类却可以定义自己的跟父类同名的属性;

虽然父类的私有方法不能被覆盖,但子类也不能定义自己的同名方法;

最终类

最终类,其实就是一种特殊要求的类:要求该类不允许往下继承下去。

形式:

final class 类名{

//类的成员定义。。。跟一般类的定义一样!

}

最终方法

最终方法,就是一个不允许下级类去覆盖的方法!!

形式:

class 类名{

final function 方法名(形参列表...){ 。。。。。 }

}

设计模式

什么叫设计模式?

简单来说,设计模式就是解决某个问题的一般性代码的经验性总结。

类比来说:

它类似之前所学的“算法”:针对某种问题,使用某种特定的语法逻辑就可以完成该任务。

工厂模式

所谓工厂模式,就是这样一个类(就是所谓的工厂类):

它可以根据“传递”给他的类名,而去生产出对应的类的对象。

单例模式:

例,就是实例(Instance),其实就是对象(object)

单例:就是一个对象;

单例模式:就是设计这样一个类,这个类只能“创造”出它的一个对象(实例);

设计一个类:mysql数据库操作类

设计目标:

1,该类一实例化,就可以自动连接上mysql数据库;

2,该类可以单独去设定要使用的连接编码(set names XXX)

3,该类可以单独去设定要使用的数据库(use XXX);

4,可以主动关闭连接;

上述设计目录,大致上相当于如下几行代码:

$link = mysql_connect(“localhost”, “root”, “123”);

mysql_query(“set names XXX”);

mysql_query(“use XXX”);

然后,后面就可以执行各种sql语句来:

$r1 = mysql_query(“insert into ....”);

$r2 = mysql_query(“delete from .....”)

$r3 = mysql_query(“select * from ....”);

使用这个类的代码如下所示:

相关推荐

LangChain4j如何自定义文档转换器实现数据清洗?

LangChain4j提供了3种RAG(Retrieval-AugmentedGeneration,检索增强生成)实现,我们通常在原生或高级的RAG实现中,要对数据进行清洗,也就是将外接...

Java 8 Stream API 详解(java stream.)

Java8StreamAPI详解一、概述在Java8中,StreamAPI是一个重要的新特性。它为处理集合(如List、Set等)中的元素提供了一种高效且富有表现力的方式。Str...

Java修炼终极指南:185 使用 Stream 过滤嵌套集合

这是面试中的一个经典问题,通常从一个模型开始,如下所示(我们假设集合是一个List):publicclassAuthor{privatefinalStringname;pri...

java8的stream使用小示例(java stream())

据JetBrains发布的2021年开发者生态系统调查,Java8在java使用的版本中仍然是当前最流行的版本。72%的专业开发人员使用Java8作为其在java开发中主要编程语言版本。现...

Node.js Stream - 实战篇(node.js in action)

本文转自“美团点评技术团队”http://tech.meituan.com/stream-in-action.html背景前面两篇(基础篇和进阶篇)主要介绍流的基本用法和原理,本篇从应用的角度,介...

Java Stream:集合处理的api(java 集合操作)

JavaStream流:高效集合处理的函数式编程利器一、什么是JavaStream?Java8引入的StreamAPI是一套用于处理集合数据的流式编程接口,通过函数式风格(无副作用的...

去除 List 中的重复元素,你知道几种实现方法?

去除List中重复元素,这在实际编程或面试中经常遇到,每个人都有习惯的写法吧,这里抛砖引玉,汇总了一些实现方案,开拓思路。准备数据假设数组中有10个数据,可能有重复,需要将重复的数据从数组中去掉。pu...

Java开发者必看!Stream流式编程10个爆款技巧,让你代码优雅飞起

为什么你的Java代码总像拧巴的麻绳?掌握这10个Stream实战技巧,代码效率与优雅度将产生质的飞跃。以下案例均来自真实电商系统场景,带你感受流式编程的降维打击!一、过滤与映射组合拳(Filter...

leetcode每日一题之存在重复元素(存在重复元素 iii)

题:给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。比如:输入:[1,2,3,1]输出:true...

告别for循环!揭秘Stream API如何让你的代码简洁度提升300%

一、当传统循环遇上现代需求真实场景复现:某电商平台需要处理10万条订单数据,要求:筛选出金额>500的订单提取用户ID并去重统计VIP用户数量传统实现方案://常规写法Set<Long...

Java中List去重的N种方法:从基础到优雅

Java中List去重的N种方法:从基础到优雅在日常的Java开发中,我们经常会遇到需要对List集合去重的情况。无论是为了清理重复的数据,还是为了优化算法性能,掌握多种去重方式都是一项非常实用的技能...

Java Stream流没用过?常用高频方法

概念Stream流是Java8添加的以一种链式调用的方法处理数据,主要侧重于计算。具有以下相关特点代码简洁链式调用Stream常用方法1.将数组变为当作List操作String[]strArr=...

核医学专业名词索引(M-R)(核医学重点归纳)

M吗啡(morphia)埋藏式心律转复除颤器(implantablecardioverterdefibrillator,ICD)麦角骨化醇(VD2,calciferol)脉冲堆积(pulsepi...

CodeMeter 新版发布(codesigner下载)

威步于2022年8月4日发布CodeMeter7.50及CodeMeter软件保护套装11.10,以下为新版内容。CodeMeterRuntime7.50StreamingSIMDExten...

世界上最小的五轴铣床Pocket NC(最小的五轴加工中心)

PocketNC,由MIT学生研制,还有说法是这款产品的设计者是来自美国蒙大拿州的一对极客夫妻。目前主要有两款产品:PocketNCV2-50,9000美元;PocketNCV2-10,60...