8.part6-2day php面向对象

学习目的:代码复用、可维护、可扩展、灵活性

一、概念引入

面向对象封装代码的另一大利器。在讲对象之前我们首先讲类,因为对象是通过类的实例化得来的。类定义了事物的抽象特点。下面我们举个例子:

人我们可以抽象为人类,人有眼睛颜色,鼻子大小,嘴大小这些属性,在类中被称之为成员变量,相应人能做眨眼、呼吸、说话等动作,在类中被称之为成员函数,这只是抽象的描述了一个人应该有什么,能干什么

而对象则是具体描述人有的属性,做的动作,我们可以实例化一个人,通过实例化传递眼睛是黑色、鼻子小、嘴小的属性参数,然后就调用眨眼、呼吸、吃饭等动作

其中这个人爸爸的眼睛是黑色的,他的眼睛也是黑色的,我们通常会说他长的像他的爸爸,我们这里称这种现象为继承,父亲就是所谓的父类或基类或超类,儿子就是子类或派生类

我们在实例化类的时候传递眼睛为黑色,会认为可能是亚洲人;如果眼睛为蓝色,会认为可能是欧洲人,传递不一样的参数会呈现出不一样的结果,我们称这个为多态

这个人的眼睛颜色大家都可以看到,我们称这个为公有public;但是他的银行卡密码却只有他知道,我们称这个为私有private;当有一天他的父亲给了他张银行卡并且告诉了他密码,

别人不知道密码所以就他和他的爸爸能用卡取钱,我们称这个为保护protected,这里就涉及到了数据的隐藏问题,也就是我们所说的封装性,那些数据可以被调用,谁能调用,那些数据不可被调用

二、概念

1、类和对象

类:定义了一件事情的抽象特点,包含属性和方法

对象:是类的实例化

面向对象(OOP)的三大特点:封装性,继承性,多态性

封装性:也就是实现数据隐藏,将一个类的使用和实现分开,只保留有限的接口与外部联系,使用者只需要知道怎么调用不需要知道如何实现的。访问权限:公有public,受保护protected,私有private

继承性:子类可以继承父类的所有的属性和方法,并可以重写或添加新的属性和方法,提高了代码的可重用性,用extends声明。继承分为单继承和多继承,PHP是单继承的,只有一个父类。

多态性:同一个类的不同对象,调用同一个方法可以获得不同的结果,多态性增强了软件的灵活性和重用性

成员变量:定义在类内部的变量 用$this->name调用

成员函数:定义在类的内部,可用于访问对象的数据用$this->fun()调用

构造函数:为对象初始化赋值,php中的子类的构造方法不会自动调用父类的构造方法需要手动写,函数名规定为__construct()   用parent::__construct();调用父类的构造函数

析构函数:当对象声明周期结束会自动调用,释放内存

类常量:用const声明 变量名没有$,全部用大写字母,用类内用self::$name调用,类外用类名::变量名,一旦定义了值不能再赋值

静态方法和属性:用static关键字来声明,用类内用self::$name调用,类外用类名::变量名,和常量的区别静态变量的只可以改

抽象类:至少有一个抽象方法的类。抽象类只规定了要做什么,却没说怎么做。类和方法都用abstract声明,当继承抽象类时必须补全抽象方法,要么就把继承的类再次声明为抽象的

接口:用interface声明接口,用implements实现接口,一个类可以实现多个接口用逗号分隔开多个接口名,接口可以用extends继承接口。接口指定了必须实现那些方法,但不用写具体怎么做。

Trait:为了类似php的单继承语言而准备的一种代码复用机制,用trait 代码名{ } 声明,用use 代码名 使用,trait可以使用trait,一个类可以使用多个trait。优先级:本类 > trait > 父类

Final关键字:如果类被声明为final,则不能呗继承。如果父类的某个方法呗声明为final则子类不能被覆盖这个方法(不能重载)。

类自动加载:

<?php
    spl_autoload_register(function($calss_name)) {
        require_once $class_name . '.php';
    });
?>

规则:类名为首字母大写的驼峰命名法{}单占一行,方法前关键字的顺序 final/abstract 然后时public/protected/private 最后是static

三、代码实现

<?php
    class MyClass
    {
        public function say()
        {
            return 'hello';
        }
    }
 
    class SubMyClass extends MyClass
    {
        public function subSay()
        {
            return 'world';
        }
    }
     
    $firstClass = new MyClass();
    $secondClass = new SubMyClass();
 
    echo $firstClass->say() . '<br/>';
    echo $secondClass->say() . $secondClass->subSay();
?>
posted @ 2020-01-09 10:41  小绵羊19957  阅读(147)  评论(0编辑  收藏  举报