• 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();
    ?>
  • 相关阅读:
    (Java实现) 删数问题
    (Java实现) 车站
    (Java实现) 活动选择
    (Java实现) 过河卒
    (Java实现) 美元汇率
    (Java实现) 零件分组
    (Java实现) 图的m着色问题
    (Java实现) 数塔问题
    Java实现 蓝桥杯VIP 算法训练 数的划分
    DirectUI的消息流转
  • 原文地址:https://www.cnblogs.com/ldwtry/p/12170136.html
Copyright © 2020-2023  润新知