浅谈面向对象的基本概念
来源:互联网 发布:照片变手绘软件 编辑:程序博客网 时间:2024/04/26 17:39
回顾面向过程
执行顺序:代码从上往下执行
特点: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.类名后面不加括号(),这不是函数。
<?phpclass 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();//调用对象的一个成员属性noseecho $wyl->nose;//调用对象的一个成员属性hairecho $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~+∞个
//当实例化一个类的时候,率先执行构造方法__constructclass Person{ public function __construct() { #code }}
1.构造方法是php类里面魔术方法的一种
2.他是一个php关键词
3.他在new一个对象的时候会被自动调用,即new之后率先执行构造方法
4.利用该特点,完成对象成员属性的值的初始化,来满足不同的对象在被new出来之后就有不同的值。
【测试1】当实例化对象的时候,率先执行构造方法__construct
<?phpclass 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】验证:先构造的后析构。
<?phpclass 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】验证:有多个类时,是否依然遵循“先构造的后析构”。
<?phpclass 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+ 成员方法可以重名,通过参数不同来判断不同的成员方法)。
- 浅谈面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 面向对象的基本概念
- 我的科研生活2017-2-23
- 编写高效C语言的四大绝招
- 22. Generate Parentheses -Meidum
- PAT A1088 rational arithmetical (20)
- vim 中Ctags的安装和使用
- 浅谈面向对象的基本概念
- Java SE7新特性之try-with-resources语句
- Merge Two Sorted Lists
- 输出全排列
- 【PAT】1095. Cars on Campus
- Opencv2系列学习笔记1(图像的基本操作)
- csdn博客改用户名
- linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
- 一帮一(天梯赛)