浅谈面向对象的基本概念
回顾面向过程
执行顺序:代码从上往下执行
特点:1.简单 2.性能高一些,执行速度快 3.代码多繁琐
面向对象 OOP
OOP: Object Oriented Programming 面向对象编程
OOA: Object Oriented Analysis 面向对象分析方法
OOD: Object Oriented Design 面向对象设计
面向对象包括(类和对象)
类: 对一组对象的定义,例如:人类,动物类。
对象: 所有具体的事物都是一个对象,包括自然界真实存在的一个具体的东西,也包括不存在的,例如:我的笔记本(单纯的笔记本还算是一个类,需要具体到是哪一个笔记本)、我的电脑。
面向对象:面向具体的事物就是面向对象。
面向对象特点/优势
1.执行效率低,相比较面向过程的代码而言
2.能更好的管理组织我们的代码(代码多,但不乱),可读性高。
3.代码能够更好的复用
4.结构很清晰
5.使用起来非常简单,写的时候很痛苦。
类的定义
1.通过class关键词声明一个类
2.命名规范:
①字母/数字/下划线;
②首字母大写;
③数字不能开头;
④不区分大小写但要严格注意大小写。
3.类名后面不加括号(),这不是函数。
<?php
class Person{#code
}
【注意】
1.类定义完成之后,如果不实例化,是没有意义的,没有任何作用。
2.函数也是这样,只定义不使用没有意义。
【命名驼峰原则】
大驼峰:所有单词首字母大写,例如:WuYaLun
小驼峰:首字母小写,其他的单词首字母都大写,例如 wuYaLun
成员属性
【注】类的成员属性是静态的,例如人类的 姓名/身高/体重。
1.可以使用public来定义,可以不加,默认是public。
2.跟变量是一样的,用$来定义,可以有默认值,遵循小驼峰命名法。
成员方法
【注】类的成员方法是动态的,例如人类的说话/跑步/吃饭。
1.可以使用public来定义,可以不加,默认是public。
2.跟函数差不多,以小驼峰命名法来命名,不能以数字开头/支持下划线,严格区分大小写。
3.可以有形参,形参可以有默认值。
4.可以有返回值。
5.跟普通函数不一样的,不能直接使用,必须存在于类中,是属于类的成员方法。
<?php
/**
* Person 类
*/
class Person
{//成员属性public $mouth;public $nose = 'big';public $hair = 'long';public $height = 180;//成员方法public function treeNewBee (){echo '我年薪20W';}public function cheDan($str = '没什么好扯的'){echo $str;}public function makeChild($who = '爱谁谁'){echo '和'.$who.'生孩子<br />';}
}//类的实例化(使用一个新的对象)
$wyl = new Person();//调用对象的一个成员属性nose
echo $wyl->nose;//调用对象的一个成员属性hair
echo $wyl->hair;//调用对象的一个成员方法
echo $wyl->makeChild();
【注意事项】
即使是在同一个类中实例化一个类,但对象仍然是唯一的。相等== 但不全等===
// 注意每实例化一个类/创建一个对象,对象都是唯一的。
$a = new Person();
$b = new Person();
// $a 和 $b 相等== 但不全等===
类的使用及成员方法/成员属性的调用
1.类的使用(实例化一个类/创建一个对象):new关键词
2.调用成员属性:$var->成员属性名
3.调用成员方法:$var->成员方法名()
<?php
// 定义了一个类class Person{public $name='wyl';public function say(){echo 'I can say';}}
// 使用这个类:实例化一个对象
$wyl = new Person();// 调用成员属性,并用echo打印出来
echo $wyl->$name;// 调用成员方法
$wyl->say();
$this关键词
在类的内部通过成员方法来调用类的成员属性时,需要用$this关键词,this是指当前对象。
构造方法__construct()
个数:0~+∞个
参数:0~+∞个
//当实例化一个类的时候,率先执行构造方法__construct
class Person{public function __construct(){#code}
}
1.构造方法是php类里面魔术方法的一种
2.他是一个php关键词
3.他在new一个对象的时候会被自动调用,即new之后率先执行构造方法
4.利用该特点,完成对象成员属性的值的初始化,来满足不同的对象在被new出来之后就有不同的值。
【测试1】当实例化对象的时候,率先执行构造方法__construct
<?php
class Person
{//成员属性public $name = 'wyl';// 构造方法public function __construct(){$this->name = 'alen';}// Person类中的say方法public function say(){echo $this->name;}
}
// 实例化一个类/创建一个对象
$wyl = new Person();
// 调用Person中的say方法
$wyl->say();
【输出结果】
alen
【结果分析】
构造方法__construct()是修改了成员属性name的值;say方法是输出了成员属性name的值。
由输出结果可知,先执行了__construct()构造方法将name的值变为了'alen',然后say方法输出。
若先执行say方法,则输出应为'wyl'
析构方法__destruct()
个数:0~1个
参数:0个
当一个对象被销/程序执行结束的时候,对象会被自动回收,最鲜明的表现是:如果类里面设置了析构方法,那么会在销毁的时候执行。
class Person{public function __destruct(){#code}
}
【原理】当整个程序快结束之前,迅速销毁内存,内存被销毁了之后就开始执行构造方法。
【应用场景】数据库关闭/关闭Word时提示保存的对话框/GD库的关闭
【注】先构造的后析构。【像入栈堆栈一样】
【测试1】验证:先构造的后析构。
<?php
class Person
{//成员属性public $name;// 构造方法public function __construct($name){echo '我的名字叫'.($this->name = $name).'<br />';}// 析构方法public function __destruct(){echo '再见'.($this->name).'<br />';}
}
// 实例化第一个对象
$wyl = new Person('1');
// 实例化第二个对象
$pig = new Person('2');
【输出结果】
我的名字叫1
我的名字叫2
再见2
再见1
【结果分析】
实例化第一个对象$wyl时,自动触发__construct,对name赋值为1;实例化第二个对象$pig时,自动触发__construct,对name赋值为2;当实例化都完成了,程序要结束运行之前,触发__destruct。此时,后构造的对象$pig率先触发__destruct,输出'再见2',然后先构造的对象$wyl再触发__destruct,输出'再见1'。
【测试2】验证:有多个类时,是否依然遵循“先构造的后析构”。
<?php
class Person
{//成员属性public $name;// 构造方法public function __construct($name){echo '我的名字叫'.($this->name = $name).'<br />';}// 析构方法public function __destruct(){echo '再见'.($this->name).'<br />';}
}
// 实例化第一个对象
$wyl = new Person('1');
// 实例化第二个对象
$pig = new Person('2');class Animal
{//成员属性public $name;// 构造方法public function __construct($name){echo '我的名字叫'.($this->name = $name).'<br />';}// 析构方法public function __destruct(){echo '再见'.($this->name).'<br />';}
}
// 实例化第一个对象
$wyl1 = new Animal('3');
// 实例化第二个对象
$pig1 = new Animal('4');
【输出结果】
我的名字叫1
我的名字叫2
我的名字叫3
我的名字叫4
再见4
再见3
再见2
再见1
【结果分析】
构造顺序:第1个类的第1个实例化==》第1个类的第2个实例化==》第2个类的第1个实例化==》第2个类的第2个实例化
析构顺序:第2个类的第2个实例化==》第2个类的第1个实例化==》第1个类的第2个实例化==》第1个类的第1个实例化
面向对象的三大目标
1.封装:把一些功能通过类给组织起来,然后方便的进行调用
2.继承:跟继承遗产一样。
3.多态:PHP里面没有很明确的多态的表现(例如C+ 成员方法可以重名,通过参数不同来判断不同的成员方法)。
浅谈面向对象的基本概念相关推荐
- 『软件工程13』浅谈面向对象方法,统一建模语言UML
浅谈面向对象方法UML 一.UML的含义 二.UML的主要内容 1.UML的概念模型 2.UML概念模型图例 三.UML的基本构造块 1.UML中的事物 (1)UML中的四种事物 (2)UML中各种事 ...
- 【c++开篇】浅谈面向对象与面向过程(举例说明)
浅谈面向对象与面向过程 前言:刚接触C++第一时间,都会经常听到这样一话:C语言面向过程,C++面向对象.在老师模拟面试时,问道你对面向对象与面向过程的认识时,我有点懵答的不是很完整,刚好C++开篇写 ...
- 【转】浅谈面向对象的坏处
转自:https://blog.csdn.net/fishmai/article/details/52079766 1.性能. 现时C++可以说是支持OOP范式中最为常用及高性能的语言.虽然如此,在C ...
- 浅谈面向对象开发原则:高内聚,低耦合
软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低 ...
- 浅谈面向对象和面向过程
1.面向对象 面向过程和面向对象都是对软件分析.设计和开发的一种思想,它指导着人们以不同的方式去分析.设计和开发软件.早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来 ...
- 浅谈面向对象与女娲造人
由于课程需要,学习Java和面向对象也已经好几个月了,今天来浅浅的谈论一下我对面向对象的理解. 什么是面向对象? 如果你百科或者wiki一下,倒是能翻出一大堆来.如果你嫌这些答案不够深沉,不够装逼,甚 ...
- 浅谈面向对象程序设计方法
目录 定义 基本思想 早期发展 背景 审视问题域的视角 抽象级别 封装体 可重用性 特征 对象唯一性 抽象性 继承性 多态性(多形性) 开发方法 Booch方法 Coad方法 OMT方法 UML(Un ...
- 浅谈面向对象三大特征的理解
面向对象程序设计(Object Oriented Programming)是把客观世界抽象成一个个的对象,并把对象作为编程的处理主体.Java语言是面向对象的程序设计语言,类和对象是面向对象的核心.类 ...
- 浅谈ICA算法的概念、本质和流程
本文转自http://m.elecfans.com/article/699564.html ICA独立成分分析是近年来出现的一种强有力的数据分析工具(Hyvarinen A, Karhunen J, ...
最新文章
- 如何识别和避免间谍软件
- windbg 调试技巧
- python xlrd关闭_Python在工作中的应用
- LeetCode Factorial Trailing Zeroes(计算阶乘结果尾部有几个0)
- C++ Opengl 显示TGA文件和扩展名源码
- maven项目部署打包
- php tp5 redis的使用(亲测)
- html5访问本地资源,HTML5实现一个访问本地文件的实例今
- elasticsearch的Linux下安装报错问题解决
- 产生复选框的html,html根据复选框勾选顺序生成字符串
- 对reids 服务器性能测试
- 构建高性能ASP.NET站点
- 努力≠上进!那些持续精进的人有多可怕?
- matlab2c使用c++实现matlab函数系列教程-load函数
- java 反序列化 怎么知道类_理解java中的序列化与反序列化
- 苹果手机如何上传文件到服务器,有限条件下,如何将IPhone手机照片传到Windows电脑中?...
- 我能取得成就的原因和不足之处
- GBase 8s分布式功能之异地容灾
- Window拷贝文件到Ubuntu虚拟机
- Two Shuffled Sequences
热门文章
- 碎步一:根据用户喜好选择不同背景图(背景选择器)
- 不能将“this”指针从“const CPaopao”转换为“CPaopao
- 3D打印技术之3D打印模型结构分析
- linux冷备份oracle数据库,Linux余Windows系统Oracle数据库简单冷备同步
- MySQL 多表查询和更新练习
- (4.0.15.5)Android开发:最详细的 Toolbar 开发实践总结
- 专访阿里陶辉:大规模分布式系统、高性能服务器设计经验分享
- mx player android5.1,MX Player
- Python——根据散点数据绘制三维曲面图( meshgrid函数以及Axes3D [plot_surface] )
- 数据结构java版txt,图解数据结构:使用Java