学习要点: 1.什么是面向对象 2.OOP的特色 3.关键的 OOP概念 4.建立 OOphp
Object /对象 Oriented 面向 /Programming 程序编程
许多语言自己就是面向对象( OOP)的,而PHP用了几年才引入了这类功能。面向对象的诞生是开发范型一次的重大改变,编程的注意力从新从应用程序的逻辑回到其数据上来。换句话说, OOP将焦点从编程的过程性事件转向最终建模的真实实体。这使得应用程序更接近于咱们周围的现实世界。网络
1、 什么是面向对象函数
l 面向过程学习
这就比如你是公司的一名员工, 今天有个任务要在公司组装一批电脑。那么你就调试
开始采购、 讨价还价、 运输回公司、 开始组装、 布线网络、 调试机器、 完成。 也就是说, 面向过程就是具体化的实现,细节明确。对象
l 面向对象继承
这就好像你是公司的总裁, 你布置给一名员工一个组装一批电脑的任务。 完毕。接口
也就是说, 面向对象就是抽象化的执行, 具体仍是由那名员工来完成。 而细节方面, 总裁不须要去考虑。 这样的好处是显而易见的, 在有管理高层的公司能够协调做业, 而没有管理高层的公司,只有一些具体实现功能的员工,会乱作一团。事件
2、OOP的特色
封装 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访
问级别;将抽象获得的数据和行为(或功能)相结合,造成 一个有机的总体,也就是将数据与操做数据的源代码进行有机的结合,造成“类”,其中数据和函数都是类的成员。
主机箱将主板、CPU、内存、显卡封装起来,留出一个接口链接显示器、音响等
继承
继承是从一个基类获得一个或多个类的机制。 继承自另外一个类的类被称为该类的子类。这种关系一般用父亲和孩子来比喻。子类
将继承父类的特性。 这些特性由属性和方法组成。 子类能够增长父类以外的新功能, 所以子类也被称为父类的“ 扩展”。
父亲的爱好钓鱼,儿子不喜欢能够不继承;
父亲的老婆是父亲的私有财产,儿子不能够继承;
儿子是父亲的子类,子类有本身的东西,有继承的东西,有些东西能够继承,有些东西不能够继承;
多态
多态是指OOP可以根据使用类的上下文来从新定义或改变类的性质或行为,或者说接口的多种不一样的实现方式即为多态。把不一样的子类对象都看成父类来看, 能够屏蔽不一样子类对象之间的差别,写出通用的代码,作出通用的编程,以适应需求的不断变化。
剪是一种方法,不一样的人去剪有不一样的动做不一样的行为;
程序尚未达到必定的水平,继承和多态用的很少;
3、关键的OOP概念
类( class) 类是对某个对象的定义。 它包含有关对象动做方式的信息, 包括它的名称、 方
法、 属性和事件。 实际上它自己并非对象, 由于它不存在于内存中。 当引用类的
代码运行时, 类的一个新的实例, 即对象, 就在内存中建立了。 虽然只有一个类,
但能从这个类在内存中建立多个相同类型的对象。 对象( object) 对象是一件事、 一个实体、 一个名词, 能够得到的东西, 能够想象有本身的标
识的任何东西。对象是类的实例化。一些对象是活的,一些对象不是。 好比这辆汽车、这我的、这间房子、这张桌子、这株植物、这张支票、这件雨衣。
归纳来讲就是: 一切皆对象。 例如:类是对象的抽象定义,说白了,若是这个对象是电脑,类能够建立出许多对
象,类能够生成不少电脑,再白一点,类能够当成一个电脑生产厂,能够生成出不少很
多台电脑。
字段( filed) 字段是用于描述类的某方面的性质,它与通常的PHP变量很是类似,只是有一些
细微的差异。 例如:电脑品牌,电脑的型号等特性。
属性( attribute) 经过方法来访问和操做字段, 一方面能够保护字段, 同时还容许访问公共字段一
样访问数据。 例如:获取电脑品牌,设置电脑品牌等操做。
方法( method)
方法与函数很是类似, 只不过方法是用来定义类的行为。 与函数同样, 方法可
以接受输入参数,能够向调用者返回一个值。
例如:打开电脑,输入文本,运行程序。
4、建立OOP
类的建立、对象的声明;
new Computer()在堆中运行;$computer1在栈中运行;$computer指向的是堆的地址;
【参看demo1.php】
<?php
//怎样去建立类,格式:修饰符class 类名 {}
//咱们去建立一个电脑的类,这类能够建立出对象(生产出电脑)
class Computer{ //类名第一个字母大写
}
//建立一台电脑出来,也就是对象的声明
//格式,变量 = new 类名()
//new Computer()表示实例化的过程(意思就是建立一个对象)
//$computer1 = new Computer()这个过程就是把实例化对象的地址赋给$computer1
//$computer1咱们就能够称做为对象的应用
$computer1 = new Computer(); //这是咱们建立的第一台电脑
//$computer2 = new Computer(); //这是咱们建立的第二台电脑
//若是但愿$computer2在栈中也是指向堆中的new Computer()
$computer2 = $computer1;
echo var_dump($computer1);
echo "<br>";
echo var_dump($computer2);
?>
继续分析:又一个New Computer()在堆中运行;两个互相不影响;
$computer1 = new Computer(); //这是咱们建立的第一台电脑
//若是但愿$computer2在栈中也是指向堆中的new Computer()
$computer2 = $computer1;
字段(成员)的添加
【参看demo2.php】
<meta charset="utf-8">
<?php
class Computer{
//字段成员的声明格式,修饰符 变量名 [=xxx];
/*
public $_name = '联想';//public表示公有,类外能够访问;
public $_model = 'i7';
通常在类中不直接设定值
*/
public $_name;
public $_model;
}
//建立一个对象,生产出一台电脑 ->表示指向
$computer1 = new Computer();
/*
echo $computer1->_name;
echo $computer1->_model;
echo '<br/>';
$computer1->_name = 'dell';
echo $computer1->_name;
*/
//给成员字段赋值
$computer1->_name = '联想';
//取值
echo $computer1->_name;
?>
方法的建立
【参看demo3.php】
<meta charset="utf-8">
<?php
class Computer{
public $_name;
public $_model;
//建立方法的格式,修饰符function 方法名(){}
//若是不加修饰符,默认就是public
public function _run(){
echo '我是运行的方法';
}
}
//建立一个对象,生产出一台电脑->表示指向
$computer1 = new Computer();
$computer1->_run(); //注意:前面不加$
?>
【参看demo4.php】
<meta charset="utf-8">
<?php
class Computer{
public $_name;
public $_model;
}
$computer1 = new Computer();
$computer1->_name = '联想';
//echo $computer1->_name;
$computer2 = new Computer();
echo $computer2->_name;
//发现$computer2打印不出联想
//由于参看堆内存发现new Computer()里面没有_name联想
$computer2 = $computer1;
//将$computer1的指向赋值给$computer2便可;
echo $computer2->_name;
?>
【参看demo5.php】
<meta charset="utf-8">
<?php
class Computer{
public $_name;
public $_model;
public function _run($_who){ //传参的方法
echo $_who.'我是运行的方法';
}
}
$computer1 = new Computer();
$computer1->_run('Lee');
?>
构造方法
【参看demo6.php】
<meta charset="utf-8">
<?php
class Computer{
//建立一个构造方法
public function Computer(){
echo '我是构造方法';
}
/*
public function Computer123(){
echo '我是普通方法';
}
*/
}
//$computer = new Computer();
//只要实例化,就能够运行构造方法
new Computer();
//其实new Computer就已经调用Computer()方法了;
//$computer->Computer123();
?>
【参看demo7.php】
<meta charset="utf-8">
<?php
class Computer{
//我要建立一个构造方法
public function __construct(){
echo '我是比较先进的构造方法';
}
}
new Computer();
?>
析构方法
【参看demo8.php】
<meta charset="utf-8">
<?php
class Computer{
//我要建立一个构造方法
public function __construct(){
echo '我是比较先进的构造方法';
}
//析构方法
public function __destruct(){
echo '我是析构方法';
}
//普通方法
public function _run(){
echo '我是普通方法';
}
}
$computer = new Computer();
$computer->_run();
?>
“我是析构方法”始终显示在最后面;由于析构方法在类所有用完以后再执行;