一. 1 、什么是面向对象,什么是类 2 、使用 CLASS 创建一个类 3 、类的成员属性和成员方法 4 、使用 new 函数对象实例化 |
起初, “ 面向对象 ” 是专指在程序设计中采用封装、继承、抽象等设计方法。可是,这个定义显然不能再适合现在情况。面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析( OOA , Object Oriented Analysis ),面向对象的设计( OOD , Object Oriented Design )、 以及我们经常说的面向对象的编程实现( OOP , Object Oriented Program )。
面向对象的要素
: 1. 抽象 性 , 2. 封装性 , 3. 共享性 , 4. 强调对象结构而不是程序结构
什么是类
:我们可以理解成一个功能集合菜单,我们通过类来实现生成我们的方法
类的成员属性和成员方法
class MyPc {
public $name ; // 为了让大家养成良好的习惯和今后对 PHP6 的适应,建议使用 public 而不是 var
var $price ;
function vod () {
return "PHP100 视频教程 ";
}
}
$pc1 = new MyPc();
$pc1 -> name;
二. 1 、创建一个和多个对象 2 、对象中的 $this 关键字 3 、初始化对象 __ construct() 4 、析构函数 __ destruct() |
对象中的 $this 关键字
$this 关键字是用来访问当前对象中的对象属性和对象方法的系统变量 (我们可以理解为 $this 是在对象中特殊的一种使用构造函数和变量的方法)
class MyPc {
public $name ;
public $price ;
function vod () {
$this ->name;
}
$this -> vod () ;
}
$this 仅能在当前对象中使用
初始化对象 __construct()
我们在创建一个类有时候需要初始化一些操作,这个时候我们需要使用初始化函数,在 PHP5 中有两种初始化方法:
1、 原 PHP4 中我们需要建立一个与类名称相同的一个对象方法:
class MyPc {
function MyPC ( ) {
//---------- 初始化操作
}
}
3、 在 PHP5 中继承了 PHP4 但为了更好的针对面向对象开发有了固定函数:
class MyPc {
function __construct() {//-----------
初始化操作
}
}
4 、析构函数 __destruct()
能够在对象释放时自动被调用的方法被称为析构函数 (规则:后进先出)
PHP4 支持析构函数,通过登录在 PHP 运行终止时用 register_shutdown_function() 调用的函数,只有类似的实行方法。 PHP5 正式支持析构函数,能够在类中指定对象释放时的动作。
我们可以理解为垃圾回收机制
当对象内部的 操作执行完毕的 时候, __destruct() 被调用,然后对象所使用的内存被释放出来。
三. 1. 封装 关 键字 : public , protected , private 2. 封装 相关 函数: __set() , __get() |
封装是把一些相关的属性和行为隐藏起来 ,从而得到保护和安全
1. 封装关键字
public 表示全局,类内部外部子类都可以访问;
protected 表示受保护的,只有本类或子类或父类中可以访问;
private 表示私有的,只有本类内部可以使用;
class MyPc {
public $name ;//----------- 全局属性任何位置都可以引用
protected $price ; //----------- 保护 属性 只有本类或子类或父类中可以访问
private function vod () {//----------- 私有 属性 只有本类内部可以使用
$this ->name;
}
}
2. 封装相关函数: __set() , __get()
某些特定操作的时候需要访问和赋值封装的类型,这个时候我们就需要其他的函数帮我们完成这些操作, PHP 为我们提供了个方法名: __set() , __get()
__set() 取得当前类中封装过私有属性或者方法重新执行或赋值操作
__set($Name,$Value)
__get() 取得当前类中封装过属性或方法并转换成共有属性
__ get ()
四. 1 、继承关键字 : extends 2 、 PHP 继承的规则 3 、基类方法重载和父类方法访问 |
1 、继承关键字 : extends
PHP 类的继承,我们可以理解成共享被继承类的内容。 PHP 中使用 extends 单一继承的方法,请切忌!(非 C++ 多继承)被继承的类我们叫做父类(基类)继承者成为子类(派生类)
2 、 PHP 继承的规则
依次被继承, class3 拥有 class1 、 class2 所以功能和属性, 避免方法和属性重名
3 、基类方法重载和父类方法访问
因为属于向下继承的原理,基类不能使用派生类里内容,这个时基类的一些方法不能完成我们的一些派生类的功能,我们就可以进行方法重载避免了,新建方法带来的混乱。
方法重载我们也可以理解方法覆盖, 在派生类里使用与基类方法重名的方法名称执行重载
重载时我们需要调用原始基类内容,再增加新内容,我们可以使用
基类名 :: 方法名称
五. 1 、抽象关键字 : abstract 2 、抽象方法和抽象类的定义 3 、抽象类和方法使用规则 |
1 、抽象关键字 : abstract
抽象 就是 无法确切的说明 ,但又有一定的概念或者名称,在 PHP 中声明一个抽象类或者方法我们需要使用 adstract 关键字
2 、抽象方法和抽象类的定义
一个类中至少有一个方法是抽象的,我们称之为抽象类。所以如果定义抽象类首先定义抽象方法。
1 、类中至少有一个抽象方法
2 、抽象方法不允许有 { }
3 、抽象方法前面必须要加 abstract
abstract class class1{
abstract function fun1();
}
3 、抽象类和方法使用规则
抽象类的几个特点:
1 、不能被实例化,只能被继承
2 、继承的派生类当中要把所以抽象方法重载才能实例化
abstract class cl1{
abstract function fun1();
abstract function fun2();
}
继承,重载所有抽象方法:
class cl2 extends cl1 {
function fun1(){
}
function fun2(){
}
}
六. 1 、关键字 : final 2 、关键字 : self 3 、关键字 : static 4 、关键字 : const |
1 、关键字 : final
用来定义类和方法的一个重要关键字, 当定义类的时候该类将不能被继承,当用来定义方法的时候该方法将不能被重载。
final class class1{//--------- 该类将不能被继承
final function fun1(){//-------- 该方法将不能被重载
}
}
2 、关键字 : self
用来用类访问当前类中的内容的关键字,类似与 $this 关键字,但 $this 是需要 类实例化以后才可以使用, self 可以直接访问当前类中的内部成员
self :: 类内部成员(属性或者方法)
注意 :因为没有实例化类访问内部属性或者方法是没有意义的,所以 self 一般用来访问类中的:静态成员,常量,或者其他定义内容
3 、关键字 : static
用来定义类的静态属性或方法,可以在类未被实例化时使用,静态属性单独占用内存而不会因创建多个对象时而导致同样的方法或者属性重复占用。
class class1{
static $name;
static function fun1(){//----------------- 静态方法内部禁止出现非静态内容
}
}
}
类内部访问静态成员 ------ 类名称 : : 静态成员 或 self : : 静态成员
类外部访问静态成员 ------ 类名称 :: 静态成员
4 、关键字 : const
用来定义类中的常量,类似 PHP 外部定义常量的关键字 define(); Const 只能修饰类当中的成员属性!
class class1{
const NAME ; //--------------- 注意事项: 1 、建议大写常量
2 、常量不使用 $ 符号
function fun1(){
}
}
七. 1 、接口的介绍与创建 关键字 : interface 2 、接口的引用与规范 关键字 : implements |
接口:一种成员属性全部为抽象的特殊抽象类,在程序中同为规范的作用
抽象类和
接口的区别:
抽象类: | 接口: |
1 、类中至少有一个抽象方法 2 、抽象方法前需加 abstract | 1 、类中全部为抽象方法 2 、抽象方法前 不用 加 abstract 3 、接口抽象方法属性为 public 4 、成员属性必须为常量 |
接口有自己的创建关键字: interface 与普通类的创建类似
interface demo {//--------------------- 声明接口类
const NAME =" 名字 ";//-------------------- 对象属性必须为常量
function Fun1 ();//--------------------- 对象方法全部为抽象方法,前面无须加 adstract
function Fun2 ();
}
接口引用区别与之前我们的学的类继承关键字 extends, 继承只能是单一性,而接口可以使用关键字: implements 多个引用并用逗号 ”,” 分开 。
设已有接口 demo , demo2 , demo3
1 、普通类引用接口例子:
class mypc implements demo , demo2 , demo3 {
}
2 、抽象类引用接口例子:
abstract class mypc implements demo , demo2 , demo3 {
}
2 、接口的引用与规范 (先继承后接口,单继承多接口)
3 、继承父类引用接口并存例子:
class mypc extends root implements demo , demo2 , demo3 {
}
4 、接口与接口继承:
interface demo3 extends demo {
}
八. 1 、多态的介绍与优势 2 、 运算符 : instanceof 3 、多态的简单应用 |
多态性是继抽象和继承后,面向对象语言的第三个特征。从字面上理解,多态的意思是 “ 多种形态 ” ,简单来说,多态是具有表现多种形态的能力的特征,在 OO 中是指 “ 语言具有根据对象的类型以不同方式处理。
优势
: OOP 的模式并不仅仅是把很多函数和功能集合起来,目的而是使用类,继承,多态的方式描述我们生活中的一种情况。从而使得我们的代码更具有 “ 物 ” 的意义。帮助我们减少一些重复性的代码和条件语句的判断。
2 、运算符 : instanceof
PHP 一个类型运算符 。 instanceof 用来测定一个给定的对象是否来自指定的对象类。
class A { }
class B { }
$ thing = new A;
if ($ thing instanceof A) {
echo 'A';
}
if ($ thing instanceof B) {
echo 'B';
}
九. 1 、对象描述的配置 2 、对象方法的异常处理 3 、克隆对象的应用 4 、自动载入对象的方法 |
1 、对象描述的配置
方法名 __tostring()
我们可以直接打印对象句柄,从而获得该方法的基本信息或其他内容。
class My{
function __tostring ( ){
echo " 我所要显示的内容 ";
}
}
$p = new My();
echo $p;
输出结果:我所要显示的内容
2 、对象方法的异常处理
方法名 __call($funname,$arr_value)
调用一些不存在的对象方法的异常处理,使程序继续正常运行。
class My{
function __call ( $n,$v ){
echo " 错误的方法名 ". $n ;
echo " 错误的参数 ". Print_r ( $v );//---- 因为参数会有多个所要用数组的方式保存,打印的时候也要就用 print_r 输出
}
}
3 、克隆对象的应用
方法名 __clone()
关键字 clone
通过克隆的方式我们可以在内存中生成两个一样的对象或升级原对象。
class My{
function __ clone ( ){
echo " 克隆时自动调用的函数 ";
}
}
区别:
$ a = new My() $ b =$ a ; //--------- 内存中只有一个对象 | $ a = new My()
$ b = clone $ a ;//------------ 内存中会有两个对象
|
4 、自动载入对象的方法
方法名 __autoload()
快速取得对象名称并自动载入进当前页面
function __autoload ( $class_n ){//------- 该方法是在类以外单独的方法也就是我们所谓的构造函数
include( $class_n .".php"); //-- 将会被自动调用,执行如下 : include("mypc.php");include("demo.php");
}
$p = new Mypc();
$d = new demo();