搜索
首页后端开发php教程php面向对象全攻略 (一) 面向对象基础知识

  1. 面向对象的概念 
    面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP 达到了软件工程的三个目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。面向对象一直是软件开发领域内比较热门的话题,首先,面向对象符合人类看待事物的一般规律。其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。为编程人员敞开了一扇大门,使其编程的代码更简洁、更易于维护,并且具有更强的可重用性。有人说PHP 不是一个真正的面向对象的语言, 
    这是事实。PHP 是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程。然而,对于大型项目,你可能需要在PHP 中使用纯的OOP 去声明类,而且在你的项目里只用对象 
    和类。这个概念我先不多说了,因为有很多朋友远离面向对象编程的主要原因就是一接触面向对象概念的时候就理解不上去,所以就不想去学下去了。等读者看完整篇内容后再去把概 
    念搞明白吧。 
    2.什么是类,什么是对象,类和对象之间的关系 
    类的概念:类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是 
    一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。 
    对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对 
    象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象 
    和对象之间的联系组成的。 
    类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。 
    上面大概就是它们的定义吧,也许你是刚接触面向对象的朋友,不要被概念的东西搞晕了,给你举个例子吧,如果你去中关村想买几台组装的PC 机,到了那里你第一步要干什么, 
    是不是装机的工程师和你坐在一起,按你提供的信息和你一起完成一个装机的配置单呀,这个配置单就可以想象成是类,它就是一张纸,但是它上面记录了你要买的PC 机的信息,如 
    果用这个配置单买10 台机器,那么这10 台机子,都是按这个配置单组成的,所以说这10 台机子是一个类型的,也可以说是一类的。那么什么是对象呢,类的实例化结果就是对象,用这 
    个配置单配置出来(实例化出来)的机子就是对象,是我们可以操作的实体,10 台机子,10个对象。每台机子都是独立的,只能说明他们是同一类的,对其中一个机做任何动作都不会 
    影响其它9 台机器,但是我对类修改,也就是在这个配置单上加一个或少一个配件,那么装出来的9 个机子都改变了,这是类和对象的关系(类的实例化结果就是对象)。 
    3.什么是面向对象编程呢? 
    就不说他的概念,如果你想建立一个电脑教室,首先要有一个房间,房间里面要有N 台电脑,有N 张桌子,N 把椅子,白板,投影机等等,这些是什么,刚才咱们说了,这就是对象,能看到的一个个的实体,可以说这个电脑教室的单位就是这一个个的实体对象,它们共 
    同组成了这个电脑教室,那么我们是做程序,这和面向对象有什么关系呢?开发一个系统程序和建一个电脑教室类似,你把每个独立的功能模块抽象成类,形成对象,由多个对象组成 
    这个系统,这些对象之间都能够接收信息、处理数据和向其它对象发送信息等等相互作用。 
    4.如何抽象出一个类? 
    上面已经介绍过了,面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,所以我们首先要做的就是如何来声明类,做出来一个类很容易,只要掌握基本的程序语法定 
    义规则就可以做的出来,那么难点在那里呢?一个项目要用到多少个类,用多少个对象,在那要定义类,定义一个什么样的类,这个类实例化出多少个对象,类里面有多少个属性,有 
    多少个方法等等,这就需要读者通过在实际的开发中就实际问题分析设计和总结了。 
    类的定义: 
    class 类名{ 

    使用一个关键字class 和后面加上一个你想要的类名以及加上一对大括号,这样一个类的结构就定义出来了,只要在里面写代码就可以了,但是里面写什么?能写什么?怎样写才是 
    一个完整的类呢?上面讲过来,使用类是为了让它实例出对象来给我们用,这就要知道你想要的是什么样的对象了,像上面我们讲的一个装机配置单上写什么,你装出来的机子就有什 
    么。比如说,一个人就是一个对象,你怎么把一个你看好的人推荐给你们领导呢?当然是越详细越好了: 
    首先,你会介绍这个人姓名、性别、年龄、身高、体重、电话、家庭住址等等。 
    然后,你要介绍这个人能做什么,可以开车,会说英语,可以使用电脑等等。只要你介绍多一点,别人对这个人就多一点了解,这就是我们对一个人的描述,现在我 
    们总结一下,所有的对象我们用类去描述都是类似的,从上面人的描述可以看到,做出一个类来,从定义的角度分两部分,第一是从静态上描述,第二是从动态上描述,静态上的描述 
    就是我们所说的属性,像上面我们看到的,人的姓名、性别、年龄、身高、体重、电话、家庭住址等等。 
    动态上也就是人的这个对象的功能,比如这个人可以开车,会说英语,可以使用电脑等等,抽象成程序时,我们把动态的写成函数或者说是方法,函数和方法是一样的。所以,所有类 
    都是从属性和方法这两方面去写,属性又叫做这个类的成员属性,方法叫做这个类的成员方法。 
    class 人{ 
    成员属性:姓名、性别、年龄、身高、体重、电话、家庭住址 
    成员方法:可以开车,会说英语,可以使用电脑 

    属性: 
    通过在类定义中使用关键字"var"来声明变量,即创建了类的属性,虽然在声明成员属性的时候可以给定初始值,但是在声明类的时候给成员属性初始值是没有必要的,比如说要是把 
    人的姓名赋上“张三”,那么用这个类实例出几十个人,这几十个人都叫张三了,所以没有必 
    要,我们在实例出对象后给成员属性初始值就可以了。 
    如:var $somevar; 
    方法(成员函数): 
    通过在类定义中声明函数,即创建了类的方法。 
    如:function somefun(参数列表) 
    { ... ... } 
    代码片段 

<?php 
class Person{ 
//下面是人的成员属性 
var $name; //人的名字 
var $sex; //人的性别 
var $age; //人的年龄 
//下面是人的成员方法 
function say(){ 
//这个人可以说话的方法 
echo "这个人在说话"; 
} function run(){ 
//这个人可以走路的方法 
echo "这个人在走路"; 
} 
} 
?>

上面就是一个类的声明,从属性和方法上声明出来的一个类,但是成员属性最好在声明 
的时候不要给初始的值,因为我们做的人这个类是一个描述信息,将来用它实例化对象,比 
如实例化出来10 个人对象,那么这10 个人,每一个人的名字、性别、年龄都是不一样的, 
所以最好不要在这个地方给成员属性赋初值,而是对每个对象分别赋值的。 
用同样的办法可以做出你想要的类了,只要你能用属性和方法能描述出来的实体都可以 
定义成类,去实例化对象。 
为了加强你对类的理解,我们再做一个类,做一个形状的类,形状的范围广了点,我们 
就做个矩形吧,先分析一下,想一想从两方面分析,矩形的属性都有什么?矩形的功能都有 
什么? 

class 矩形 
{ 
//矩形的属性 
矩形的长; 
矩形的宽; 
//矩形的方法 
矩形的周长; 
矩形的面积; 
}

代码片段 

<?php 
class Rect{ 
var $kuan; 
var $gao; 
function zhouChang(){ 
计算矩形的周长; 
} function mianJi(){ 
计算矩形的面积; 
} 
} 
?>

如果用这个类来创建出多个矩形对象,每个矩形对象都有自己的长和宽,都可以求出自 
己的周长和面积了。 

 以上就是php面向对象全攻略 (一) 面向对象基础知识的内容,更多相关内容请关注PHP中文网(www.php.cn)! 


声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP与Python:了解差异PHP与Python:了解差异Apr 11, 2025 am 12:15 AM

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

php:死亡还是简单地适应?php:死亡还是简单地适应?Apr 11, 2025 am 12:13 AM

PHP不是在消亡,而是在不断适应和进化。1)PHP从1994年起经历多次版本迭代,适应新技术趋势。2)目前广泛应用于电子商务、内容管理系统等领域。3)PHP8引入JIT编译器等功能,提升性能和现代化。4)使用OPcache和遵循PSR-12标准可优化性能和代码质量。

PHP的未来:改编和创新PHP的未来:改编和创新Apr 11, 2025 am 12:01 AM

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。

您什么时候使用特质与PHP中的抽象类或接口?您什么时候使用特质与PHP中的抽象类或接口?Apr 10, 2025 am 09:39 AM

在PHP中,trait适用于需要方法复用但不适合使用继承的情况。1)trait允许在类中复用方法,避免多重继承复杂性。2)使用trait时需注意方法冲突,可通过insteadof和as关键字解决。3)应避免过度使用trait,保持其单一职责,以优化性能和提高代码可维护性。

什么是依赖性注入容器(DIC),为什么在PHP中使用一个?什么是依赖性注入容器(DIC),为什么在PHP中使用一个?Apr 10, 2025 am 09:38 AM

依赖注入容器(DIC)是一种管理和提供对象依赖关系的工具,用于PHP项目中。DIC的主要好处包括:1.解耦,使组件独立,代码易维护和测试;2.灵活性,易替换或修改依赖关系;3.可测试性,方便注入mock对象进行单元测试。

与常规PHP阵列相比,解释SPL SplfixedArray及其性能特征。与常规PHP阵列相比,解释SPL SplfixedArray及其性能特征。Apr 10, 2025 am 09:37 AM

SplFixedArray在PHP中是一种固定大小的数组,适用于需要高性能和低内存使用量的场景。1)它在创建时需指定大小,避免动态调整带来的开销。2)基于C语言数组,直接操作内存,访问速度快。3)适合大规模数据处理和内存敏感环境,但需谨慎使用,因其大小固定。

PHP如何安全地上载文件?PHP如何安全地上载文件?Apr 10, 2025 am 09:37 AM

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。

什么是无效的合并操作员(??)和无效分配运算符(?? =)?什么是无效的合并操作员(??)和无效分配运算符(?? =)?Apr 10, 2025 am 09:33 AM

JavaScript中处理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。1.??返回第一个非null或非undefined的操作数。2.??=将变量赋值为右操作数的值,但前提是该变量为null或undefined。这些操作符简化了代码逻辑,提高了可读性和性能。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!