类与对象

万物皆为对象,对象是程序中的一种数据结构,用来表现某个事物。反过来讲事物在程序中可以用某个对象来表示。

类是面向对象程序设计的基本概念,可以理解为是统一管理属于同一事物的变量或函数。通俗的理解类就是对现实中某一种类的东西的抽象, 比如汽车可以抽象为一个类,汽车拥有名字、轮胎、速度、重量等属性,可以有换挡、前进、后退等操作方法。

类是一类东西的结构描述,而对象则是一类东西的一个具体实例,例如汽车这个名词可以理解为汽车的总类,但这辆汽车则是一个具体的汽车对象。对象可以表达万事万物,对象的属性和方法可以描述表达万事万物。

对象  ->(归纳总结)抽象  -> 类

类  ->(具体化实现)实例化   ->  对象

定义类的方法(类中的变量叫做属性,类中的函数叫做方法)

如何声明类
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();
?>

类与对象看起来比较相似,但实际上有本质的区别,类是抽象的概念,对象是具体的实例。类可以使程序具有可重用性。

面向对象和面向过程

面向对象取决于我们看事物的角度,面向过程指把所有事物看作一整个运行过程,而面向对象指把所有事物看作一个个对象交互进行。

以面包房糕点铺为例

面向过程就是我首先买原料小麦,加工蛋糕,包装,贩卖->面包房工作,负责整个流程。

面向对象就是先分为采购员、加工员、包装员和发货员这些对象,每个对象都有其负责的工作内容,即把整个过程分别分配给了这些对象,如果我就是这个发货员,但由于我比较路痴,不能顺利的把面包送给客户,此时我们知道其他员工的工作并没有出现问题,仅仅是发货员出现问题了,我们只需要解决发货员这个问题,整个流程就能顺利进行了。

到这我们就发现,面向过程如果出现问题的时候,我们查找错误需要在整个过程查找,而面向对象仅仅需要在相应的对象排查和解决就行了,从而减轻了业务的复杂度,后期扩展也会简单很多。

面向对象三大特性

封装指尽可能隐蔽对象的内部细节,对外形成一个边界(或者说形成一道屏障),只保留有限的对外接口使之与外部发生关系。

继承指类之间的关系,比如

类与对象

多态指一个对象展示不同的形态,比如鼠标有发光的,有带呼吸灯的。