回顾面向过程

执行顺序:代码从上往下执行

特点: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+ 成员方法可以重名,通过参数不同来判断不同的成员方法)。

浅谈面向对象的基本概念相关推荐

  1. 『软件工程13』浅谈面向对象方法,统一建模语言UML

    浅谈面向对象方法UML 一.UML的含义 二.UML的主要内容 1.UML的概念模型 2.UML概念模型图例 三.UML的基本构造块 1.UML中的事物 (1)UML中的四种事物 (2)UML中各种事 ...

  2. 【c++开篇】浅谈面向对象与面向过程(举例说明)

    浅谈面向对象与面向过程 前言:刚接触C++第一时间,都会经常听到这样一话:C语言面向过程,C++面向对象.在老师模拟面试时,问道你对面向对象与面向过程的认识时,我有点懵答的不是很完整,刚好C++开篇写 ...

  3. 【转】浅谈面向对象的坏处

    转自:https://blog.csdn.net/fishmai/article/details/52079766 1.性能. 现时C++可以说是支持OOP范式中最为常用及高性能的语言.虽然如此,在C ...

  4. 浅谈面向对象开发原则:高内聚,低耦合

    软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低 ...

  5. 浅谈面向对象和面向过程

    1.面向对象   面向过程和面向对象都是对软件分析.设计和开发的一种思想,它指导着人们以不同的方式去分析.设计和开发软件.早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来 ...

  6. 浅谈面向对象与女娲造人

    由于课程需要,学习Java和面向对象也已经好几个月了,今天来浅浅的谈论一下我对面向对象的理解. 什么是面向对象? 如果你百科或者wiki一下,倒是能翻出一大堆来.如果你嫌这些答案不够深沉,不够装逼,甚 ...

  7. 浅谈面向对象程序设计方法

    目录 定义 基本思想 早期发展 背景 审视问题域的视角 抽象级别 封装体 可重用性 特征 对象唯一性 抽象性 继承性 多态性(多形性) 开发方法 Booch方法 Coad方法 OMT方法 UML(Un ...

  8. 浅谈面向对象三大特征的理解

    面向对象程序设计(Object Oriented Programming)是把客观世界抽象成一个个的对象,并把对象作为编程的处理主体.Java语言是面向对象的程序设计语言,类和对象是面向对象的核心.类 ...

  9. 浅谈ICA算法的概念、本质和流程

    本文转自http://m.elecfans.com/article/699564.html ICA独立成分分析是近年来出现的一种强有力的数据分析工具(Hyvarinen A, Karhunen J, ...

最新文章

  1. 如何识别和避免间谍软件
  2. windbg 调试技巧
  3. python xlrd关闭_Python在工作中的应用
  4. LeetCode Factorial Trailing Zeroes(计算阶乘结果尾部有几个0)
  5. C++ Opengl 显示TGA文件和扩展名源码
  6. maven项目部署打包
  7. php tp5 redis的使用(亲测)
  8. html5访问本地资源,HTML5实现一个访问本地文件的实例今
  9. elasticsearch的Linux下安装报错问题解决
  10. 产生复选框的html,html根据复选框勾选顺序生成字符串
  11. 对reids 服务器性能测试
  12. 构建高性能ASP.NET站点
  13. 努力≠上进!那些持续精进的人有多可怕?
  14. matlab2c使用c++实现matlab函数系列教程-load函数
  15. java 反序列化 怎么知道类_理解java中的序列化与反序列化
  16. 苹果手机如何上传文件到服务器,有限条件下,如何将IPhone手机照片传到Windows电脑中?...
  17. 我能取得成就的原因和不足之处
  18. GBase 8s分布式功能之异地容灾
  19. Window拷贝文件到Ubuntu虚拟机
  20. Two Shuffled Sequences

热门文章

  1. 碎步一:根据用户喜好选择不同背景图(背景选择器)
  2. 不能将“this”指针从“const CPaopao”转换为“CPaopao
  3. 3D打印技术之3D打印模型结构分析
  4. linux冷备份oracle数据库,Linux余Windows系统Oracle数据库简单冷备同步
  5. MySQL 多表查询和更新练习
  6. (4.0.15.5)Android开发:最详细的 Toolbar 开发实践总结
  7. 专访阿里陶辉:大规模分布式系统、高性能服务器设计经验分享
  8. mx player android5.1,MX Player
  9. Python——根据散点数据绘制三维曲面图( meshgrid函数以及Axes3D [plot_surface] )
  10. 数据结构java版txt,图解数据结构:使用Java