美文网首页
面向对象

面向对象

作者: 始于原子 | 来源:发表于2018-04-18 11:25 被阅读0次

类成员的定义

成员属性的定义

// 非静态成员属性的定义
public $属性名[=属性值];
var $属性名[=属性值]; // 老版本定义

// 静态成员属性的定义
public static $属性名[=属性值];

// 类常量
const 常量名 = 常量值;

成员方法的定义

// 非静态成员方法的定义
public function 方法名([形参列表]){
    # code
}

// 静态成员方法的定义
public static function 方法名([形参列表]){
    # code
}

类成员的使用

# 实例化类
$obj = new ClassName();

// 类的外部调用非静态成员
$obj -> 属性名;
$obj -> 方法名();

// 类的外部调用静态成员(使用范围解析操作符)
$obj::属性名;
$obj::方法名();

// 类的外部调用类常量
$obj::常量名;

// 类的内部调用非静态方法
$this->属性名;
$this->方法名();

// 类的内部调用静态方法
ClassName::$属性名;
ClassName::方法名();

// 类的内部调用常量
ClassName::常量名;

构造方法

PHP不负责定义这个构造方法,只负责调用构造方法

当使用new关键字实例化这个类的对象的时候,该类的构造方法就会被PHP自动调用执行一次

class ClassName extends AnotherClass
{
    function __construct(argument)
    {
        # code...
    }
}

析构方法

PHP不负责定义析构方法,只负责调用析构方法

当对象被销毁时(手动销毁和程序执行完毕自动销毁),析构方法会被PHP自动调用执行一次

析构方法不支持传递参数

class ClassName extends AnotherClass
{
    function __destruct()
    {
        # code...
    }
}

对象的值传递和引用传递

对象的引用传递

原理:对象的引用传递将会使$obj变量和$obj2变量指向同一个变量值空间

class ClassName
{
    public $name = 'zjlsp';
}
$obj = new ClassName(); // 实例化类
$obj2 = &$obj;  // 对象的引用传递

$obj2-> name = 'zjlsp2';
var_dump($obj->name);   // $obj的属性也随之改变

对象的值传递

原理:对象的值传递将会就地复制一份变量的值空间。$obj变量和$obj2变量指向的是两个不同的值空间,但是他们值空间所指向的对象空间却是同一个;所以导致最终改变任何一方的值,也将会影响到另外一方的值

class ClassName
{
    public $name = 'zjlsp';
}
$obj = new ClassName(); // 实例化类
$obj2 = $obj;

$obj2-> name = 'zjlsp2';
var_dump($obj->name);   // $obj的属性也随之改变

对象的克隆

$obj = new ClassName();
$obj2 = clone $obj;

自动加载

什么时候使用到这个类,就什么时候加载这个类文件的操作策略!

// 自动加载函数
function  __autoload($className){
    # code
}

// 自定义自动加载函数
function zdjz($className){
    # code
}
spl_autoload_register('zdjz');

// 自定义自动加载非静态方法和静态方法
class ClassName
{
    public static function f1($className){
        # code...
    }
    public function f2($className)
    {
        # code...
    }
}
spl_autoload_register(array('ClassName','f1'));
spl_autoload_register(ClassName::f1);  // 自定义自动加载静态方法

$obj = new ClassName();
spl_autoload_register(array($obj,'f1'));  // 自定义自动加载静态方法

如果我们使用了自定义的自动加载,那么,默认的自动加载函数将会失效,如果还想继续使用默认的自动加载,就必须再将默认的自动加载注册一次
可以注册多个自定义自动加载

关键字

// self专门用来在本类的内部代替本类的类名的
self::$属性名;

// parent关键字其实就是专门在子类中代替父类的类名的
parent::$属性名;

访问限定修饰符

标识符 描述 作用域
public 公共的 表示在类的内部,类的外部和类的继承链中都能直接访问
protected 受保护的 表示在类的内部和继承链中能被直接访问
private 私有的 表示只能在本类的内部被直接访问

最终类和最终方法

被final申明的类将不能被继承

final class ClassName
{
    final public function fName(){

    }
}

抽象类

包括:1)普通类的所有成员;2)抽象方法;

抽象类不能够被直接实例化为对象,但是抽象类中的静态成员和类常量都能够正常使用
抽象类如果被普通类所继承,那么抽象类中的抽象方法必须全部被实现
抽象类还可以被抽象类所继承,如果被抽象类所继承,那么被继承的那个抽象类中其抽象方法可以不被实现

abstract  class  类名{
    // 抽象类成员
    abstract function 抽象方法名(){

    }
}

接口类

包括:1)接口常量;2)接口抽象方法

接口如果被普通类所实现,那么,接口中的所有接口抽象方法都要被全部实现
接口还可以被抽象类所实现,如果被抽象类实现,那么接口中的接口抽象方法可以不被实现
接口中的接口抽象方法只能是public类型

interface  接口名{
    // 接口成员
}

// 接口可以被多实现:使用implements关键字来实现接口
class ClassName implements inter1,inter2{

}

静态延时绑定

静态延时绑定是PHP5.3之后才出现的特性

class A {
    function f1(){
        echo static::$var1;
    }
}
class B extends A
{
    public static $var1 = '我是类B';
}
class C extends A
{
    public static $var1 = '我是类C';
}
$b = new B();
$b -> f1(); // 我是类B

$c = new C();
$c -> f1(); // 我是类C

重载

PHP访问一个不存在的成员时,默认的处理方式为:报一个NOTICE级别的错误,并且返回NULL值

PHP访问一个非公有的成员,默认的处理方式为:直接报致命的错误,阻止程序继续执行

属性的重载(非静态)

class ClassName {
    // 当获取一个不可访问的(非静态)成员属性值时,进行自定义的处理
    function __get($name){
        # code...
    }
    // 当设置一个不可访问的(非静态)成员属性时,进行自定义的处理
    function __set($name){
        # code...
    }
    // 当删除一个不可访问的(非静态)成员属性值时,进行自定义的处理
    function __unset($name){
        # code...
    }
    // 当判断一个不可访问的(非静态)成员属性是否存在时,进行自定义的处理
    function __isset($name){
        # code...
    }
}

方法的重载

class ClassName {
    // 当访问一个不可访问的(非静态)成员方法时,进行自定义处理
    function __call($name){
        # code...
    }
    // 当访问一个不可访问的(静态)成员方法时,进行自定义处理*(本身必须是静态方法)
    static function __callstatic($name){
        # code...
    }
}

面向对象的三大特性

1)封装的特性, 将特定的功能打包成一个类。

2)继承的特性, 指的就是extends语法特性。

3)多态的特性, 指的就是重写的特性,一种方法可以有多种实现方式。

相关文章

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • 总结.Net基础知识——献给即将入坑的同行们(一期)

    什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗...

  • 面向对象基础

    面向对象编程包括: 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程实现(OOP) 面向对象思想...

  • 20-OOP类与对象

    面向对象 Object Oriented 学习面向对象:XXOO 面向对象的学习: 面向过程和面向对象的区别: 面...

  • JavaScript面向对象核心知识归纳

    面向对象 概念 面向对象就是使用对象。面向对象开发就是使用对象开发。 面向过程就是用过程的方式进行开发。面向对象是...

  • 面向对象(未完成)

    面向对象 标签(空格分隔): 面向对象 第一章:面向对象(上) 什么叫面向对象 面向过程、面向对象、两者区别 构造...

  • 面向对象:创建对象&继承

    博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...

  • 面向对象

    了解什么是面向对象 首先,我们学习面向对象,要了解什么是面向对象,面向对象的重要概念:类,对象。 面向对象提出的这...

  • 面向对象的三大基本特征和五大设计原则

    1、面向对象概念 1.1、理解面向对象 面向对象是相对面向过程而言; 面向对象和面向过程都是一种思想; 面向过程:...

网友评论

      本文标题:面向对象

      本文链接:https://www.haomeiwen.com/subject/ozlvkftx.html