目录
一: 什么是面向对象编程?
简称OOP(object oriented programming);
也即基于面向过程编程的基础上,增加一层操作主体,更能满足人的逻辑思维;
面向对象不是一种技术,是一种编程思想;
二: 面向对象编程的特点
- 封装
- 继承
- 多态
三: 面向对象编程和面向过程编程的区别?
共同点:
- 模块化编程,都能实现功能;
- 都能实现代码的复用;
不同点
- 面向过程代码没有冗余,实现起来比较简单,但是后期维护非常困难;
- 面向对象前期开发难度大,但是后期的维护比较容易;
四: 为什么学习面向对象?
面向对象是一种计算机编程架构,比面向过程具有更强的灵活性和扩展性。
面向对象编程也是一个程序员发展的“分水岭”,很多初学者和略有成就的开发者,因为无法理解“面向对象”而放弃发展。
要想在编程这条路上走的更远,就一定要掌握面向对象编程思想。
主流php框架都是面向对象编程方式实现(如ThinkPHP,CI,YII,Zend framework等)
五: 面向对象编程应用范围
小功能或者小项目建议使用面向过程编程,大项目面向对象编程;
六: 面向对象编程的三个基本概念
- 类
- 对象
- 实例化
1. 类
关键字: class
类是具有共同属性和能力的集合,把具有的共同特性抽离出来,形成语言,能被系统识别;
类是对象的抽象,类是一种结构(函数也是一种结构);
结构:
<?php
//类名要见名知义
class 类名{
//类成员
}
?>
2. 对象
object 自然界一切都是对象,也是一个个个体,必须与类相对应,是类的具体;
3. 实例化
实例化: new 是类获取对象的一个过程;
对象=new 类名(); //有构造方法时并且要传参数,此()必须有;
4. 类成员
类成员:定义类里面的属性、方法(函数)、常量;类里面只能存放以上三种结构;
1).属性
在类里面定义类成员必须加访问修饰限定符;
访问修饰限定符:
- public: 公共的,可以在类外和类的内部访问;
- protected: 受保护的,只能在类的内部访问;
- private: 私有,只能在自己类的内部访问;
- 在PHP5.0之前,还有以var 声明的,代表公有;
属性是属于对象的
访问属性是通过对象来访问 对象->属性
访问: 对象->属性
修改: 对象->属性=值
2).方法
方法本质上属于类,但是有一点,方法既可以用类来访问也可以用对象来访问,
方法的访问一般来说是通过对象来访问
语法: 对象->方法名();
3).类常量
面向过程中定义常量 : define(‘PI’,3.14);
面向对象中定义常量
const 常量名=值
类常量不在对象中,在类中
//定义类常量(没有访问修饰限定符)
const PI = 3.14;
访问类常量是通过类来访问
外部访问语法: 类名 ::常量名
内部访问语法: self ::常量名 self代表当前类
::范围解析操作符
七: 私有访问
1. 在类的外部只能访问的公共方法,无法访问私有和受保护的;所以只能在类的内部访问,通过访问公有方法来间接访问;
2. 必须使对象进入到类的内部,由于实例化会产生多个对象,采用全局变量局部化不方便, 在类的方法内部有一个$this,代表进入到该类的对象;
八: $this和self的区别
- $this代表进入当前类的对象,self代表当前类
- $this可以被直接打印,self不能被打印
九: 总结
类成员中,属性和方法的定义必须加上访问限定修饰符;
常量不需要加任何东西;
在类的外部只能访问公有的东西,私有的要在外部访问,通通放到公有的方法里面去;
1、属性是属于对象,只能使用对象来调用,公有的属性可以在类的外部和内部都可以用对象来访问,在外部直接通过对象名->属性名来使用,在内部,使用公有方法里面写$this->属性名,然后再类的外部,通过对象->公有方法来实现;
2.私有的属性和受保护的属性,只能在内部,使用公有方法里面写$this->属性名,然后再类的外部,通过对象->公有方法来实现;
3.方法是属于类,既可以使用类来访问也可以使用对象来访问,但是在严格模式下,只允许类访问静态方法,所以规定调用方法时使用对象;
4.在类的外部只能访问公有的方法,如果说想访问非公有的方法,只能把非公有方法放到公有方法里面,在外部通过对象来调用公有方法来实现;
5.常量是属于类的,常量的访问是由类来实现,在外部通过 类名::常量名
在内部,把常量的访问方式放到公有的方法里面,通过 self::常量名,在外部通过对象来访问公有方法来实现;
十: 举个小例子论证理论
<?php
//类名要见名知义
class Person{
//类成员 在类的内部只能是类成员,都必须加上访问修饰限定符
//属性(可以有值也可以没有值)
public $eyes = 2; //公共的属性
protected $arg = 3; //受保护的属性
private $ear = 2;//私有的属性
var $sex; //公共的属性
//定义一个公共的方法,方法如果不加访问限制修订符,默认为public
public function getArg()
{
echo $this->arg; /*$this指的是当前实例化的对象,更通俗点就
是谁调用该方法或者属性,this就代表谁,代表进入到该类内部的对象*/
echo "<br />";
echo self::PI; //类里面访问常量用self
}
//定义一个常量
const PI =3.14;
public function getPi()
{
echo self::PI; //self代表当前类,只能在类的内部使用
var_dump($this); //外部对象$person this===$person
//var_dump(self);//是一种结构,不能直接打印
}
}
$person = new Person(); //实例化一个对象
//访问属性,属性不能加$符号
echo $person->eyes;
echo "<br />";
//放问类里面的方法
$person->getArg();
echo "<br />";
//放问类里面的常量
echo Person::PI;
?>