面向对象
封装
继承
多态
面向对象设计是一种软件设计方法,是一种工程化规范。
面向对象设计模式解决的是“类与相互通信的对象之间的组织关系。
面向对象的编程产生的历史原因:由于面向过程编程在构造系统时,无法解决重用,维护,扩展的问题,而且逻辑过于复杂,代码晦涩难懂,因此,人们开始想能不能让计算机直接模拟现实的环境,以人类解决问题的方法,思路,习惯和步骤来设计相应的应用程序。于是,面向对象的编程思想就产生了。
面向对象的编程的主要思想是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为。对象作为程序的基本单位,将程序和数据封装其中,以提高程序的重用性,灵活性和可扩展性。类是创建对象的模板,一个类可以创建多个对象。对象是类的实例化。
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
类
1、类使用 class 关键字后加上类名定义。
2、类名后的一对大括号{}内可以定义变量和方法。
3、类的变量使用 var 来声明, 变量也可以初始化值。
4、函数定义类似PHP函数的定义,但函数只能通过该类及其实例化的对象访问。
5、变量 $this 代表自身的对象。
列:
class people
{
var $top;
var $body;
var $footer;
function getAtt()
{
echo $this->top;
}
function setTitle($t)
{
$this->body = $t;
}
function getTitle()
{
echo $this->body;
}
}
//实例化对象
$peo = new people;
$peo->getAtt();
$peo->setTitle('身体');
$peo->getTitle();
php属性和方法的访问控制
public(公有):公有的类成员可以在任何地方被访问。
protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
private(私有):私有的类成员则只能被其定义所在的类访问。
extends:继承
1、继承将会影响到类与类,对象与对象之间的关系。
2、子类就会继承父类所有【公有的】和【受保护的】方法,除非子类覆盖了父类的方法,被继承的方法都会保留其原有功能。
3、使用关键字 extends 来继承一个类
4、被继承的类我们叫做父类(基类)继承者成为子类(派生类)
列:
class maxbox
{
protected $name = '红盒子';
}
class box extends maxbox
{
public $width = '100px';
protected $color = 'red';
private $height = '200px';
function getAtt()
{
echo $this->width;
echo $this->color;
echo $this->height;
echo $this->name;
}
function getColor()
{
echo $this->color;
}
function getheight()
{
echo $this->height;
}
}
$box = new box;
echo $box->width;
//echo $box->color;
//发生致命错误,因为color为受保护的属性,不能直接在外部使用。
echo $box->getColor();
//echo $box->height;
//发生致命错误,因为height为受保护的属性,不能直接在外部使用。
echo $box->getheight();
echo $box->getAtt();
重载:
就是当子类继承父类的一些方法后,子类又在其内部定义了相同的方法,则这个新定义的方法会覆盖继承而来的父类的方法,子类只能调用其内部定义的方法。
列:
class minBox extends box
{
function getAtt()
{
echo $this->width;
echo $this->color;
echo $this->name;
//echo $this->height;
//不会继承私有的属性或方法
}
}
$minBox = new minBox;
echo $minBox->width;
echo $minBox->getAtt();
多继承 trait
Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。
Trait 和 Class 相似,无法通过 trait 自身来实例化。
使用 use 声明trait
class A
{
public function getColor()
{
echo "green";
}
}
trait B
{
public function getBl()
{
echo "布料亚麻";
}
}
trait D
{
public function getBll()
{
echo "aasd";
}
}
class C extends A
{
use B,D;
}
$c = new C;
$c->getColor();
$c->getBl();
$c->getBll();