万物皆为对象,对象是程序中的一种数据结构,用来表现某个事物。反过来讲事物在程序中可以用某个对象来表示。
类是面向对象程序设计的基本概念,可以理解为是统一管理属于同一事物的变量或函数。通俗的理解类就是对现实中某一种类的东西的抽象, 比如汽车可以抽象为一个类,汽车拥有名字、轮胎、速度、重量等属性,可以有换挡、前进、后退等操作方法。
类是一类东西的结构描述,而对象则是一类东西的一个具体实例,例如汽车这个名词可以理解为汽车的总类,但这辆汽车则是一个具体的汽车对象。对象可以表达万事万物,对象的属性和方法可以描述表达万事万物。
对象 ->(归纳总结)抽象 -> 类
类 ->(具体化实现)实例化 -> 对象
定义类的方法(类中的变量叫做属性,类中的函数叫做方法)
如何声明类 class 类名 { //花括号自占一行 [属性] [方法] } //花括号自占一行
实例
//定义一个汽车类
<?php
class Car
{
public $name = '汽车';
protected $speed = '50km/h';
private $color = 'black';
function getFunc(){
return '创建一个方法,方法内部可以使用$this伪变量调用对象的属性或者方法';
echo $this->color;
}
}
?>
$this可以理解为这个类的一个实例或者对象,可以通过它在类的内部调用公有属性、私有属性和受保护属性。
在类中定义的变量称之为属性,通常属性跟数据库中的字段有一定的关联,因此也可以称作“字段”。属性声明是由关键字 public,protected或者 private 开头,后面跟一个普通的变量声明来组成。
属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指PHP脚本在编译阶段时就可以得到其值,而不依赖于运行时的信息才能求值。
class simpleClass
{
//错误的属性声明
public $var1 = 'Hello'.'World';
public $var2 = <<<EOD
Hello World
EOD;
public $var3 = 1+2;
public $var4 = self::myStaticMethod();
public $var5 = $myVar
//正确的属性声明
public $var6 = 3;
public $var7 = array(true,false);
}
类的实例化
<?php
//实例化一个car对象
$car = new Car();
$car->name = '汽车';
$car->speed = '50km/h'; //错误 受保护的属性不允许外部调用
$car->color = 'black'; //错误 私有属性不允许外部调用
$car->getFunc();
?>
类与对象看起来比较相似,但实际上有本质的区别,类是抽象的概念,对象是具体的实例。类可以使程序具有可重用性。
面向对象和面向过程
面向对象取决于我们看事物的角度,面向过程指把所有事物看作一整个运行过程,而面向对象指把所有事物看作一个个对象交互进行。
以面包房糕点铺为例
面向过程就是我首先买原料小麦,加工蛋糕,包装,贩卖->面包房工作,负责整个流程。
面向对象就是先分为采购员、加工员、包装员和发货员这些对象,每个对象都有其负责的工作内容,即把整个过程分别分配给了这些对象,如果我就是这个发货员,但由于我比较路痴,不能顺利的把面包送给客户,此时我们知道其他员工的工作并没有出现问题,仅仅是发货员出现问题了,我们只需要解决发货员这个问题,整个流程就能顺利进行了。
到这我们就发现,面向过程如果出现问题的时候,我们查找错误需要在整个过程查找,而面向对象仅仅需要在相应的对象排查和解决就行了,从而减轻了业务的复杂度,后期扩展也会简单很多。
面向对象三大特性
封装指尽可能隐蔽对象的内部细节,对外形成一个边界(或者说形成一道屏障),只保留有限的对外接口使之与外部发生关系。
继承指类之间的关系,比如
多态指一个对象展示不同的形态,比如鼠标有发光的,有带呼吸灯的。
发表评论