首頁 php教程 php手册 PHP面向对象的进阶学习

PHP面向对象的进阶学习

Jun 13, 2016 am 10:49 AM
abstract final php 內容 學習 物件 常量 我們 介面 類別 進階 面向

学习内容:抽像类、接口、final、类常量
 
一、抽像类(abstract)
        在我们实际开发过程中,有些类并不需要被实例化,如前面学习到的一些父类,主要是让子类来继承,这样可以提高代码复用性
语法结构:
    abstract class 类名{
        属性 $name;
        方法(){}  //方法也可以为abstract 修饰符 function 方法名(){}
    }
例:
    abstract class animal{
        public $name;
        public $age;
        //抽象方法不能有方法体,主要是为了让子类去实现;
        abstract public function cry();
        //抽象类中可以包含抽象方法,同时也可以包含实例类方法
        public function getname(){
            echo $this->name;
        }
    }
    class Cat{
        public function cry(){
            echo 'ok';
        }
    }
 
    理解:动物类,实际上是一个抽象的概念,它规定了一些动物有些哪共同的属性和行为,但实际上它自己并没收有那些属性和行为。再比如:交通工具类,植物类等等
 
注意:
    1、如果一个类用了abstract来修饰,则该类就是一个抽象类,如果一个方法被abstract修饰,那么该方法就是一个抽象方法,抽象方法不能有方法体=> abstract function cry();  连{}也不可以有
    2、抽象类一定不能被实例化,抽象类可以没有抽象方法,但是如果一个类包含了任意一个抽象方法,这个类一定要声明为abstract类;
    3、如果一个类继承了另一个抽象类,则该子类必须实现抽象类中所有的抽象方法(除非它自己也声明为抽象类);
 
二、接口(interface)
        接口就是将一些没有实现的方法,封装在一起,到某个类要用的时候,再根据具体情况把这些方法写出来;
        语法结构
            interface 接口名{
                //属性、方法
                //接口中的方法都不能有方法体;
            }
            如何实现接口
            class 类名 implements 接口名{
 
            }
        理解:接口就是更加抽象的抽象类,抽象类里的方法可以有方法体,但是接口中的方法必须没有方法体。接口实现了程序设计的多态和高内聚、低偶合的设计思想;
 
例:
        //接口是定义规范、属性的,一般以小写的i开头;
        interface iUsb{
            public function start();
            public function stop();
        }
        //编写相机类,让它去实现接口
        //当一个类实现了某个接口,那么该类就必须实现接口的所有方法
        class Camera implements iUsb{
            public function start(){
                echo 'Camera Start Work';
            }
            public function stop(){
                echo 'Camera Stop Work';
            }
        }
        //编写一个手机类 www.2cto.com
        class Phone implements iUsb{
            public function start(){
                echo 'Phone Satrt Work';
            }
            public function stop(){
                echo 'Phone Stop Work';
            }
        }
        $c=new Camera();
        $c->start();
        $p=new Phone();
        $p->start();
 
    什么时候使用接口:
        1、定下规范,让其他程序员来实现
        2、当多个平级的类,都需要去实现某个功能,但是实现的方式不一样;
 
    小结:
        1、接口不能被实例化,接口中所有的方法都不能有主体;
        2、一个类可以实现多个接口,以逗号(,)分隔 class demo implements if1,if2,if3{}
        3、接口中可以有属性,但必须是常量,常量不可以有修饰符(默认是public修饰符)
            如:interface iUsb{
                        const A=90;
                    }
                    echo iUsb::A;
        4、接口中的方法都必须是public的,默认是public;
        5、一个接口不能继承其他的类,但是可以继承其它的接口,一个接口可以继承多个其它接口
            如:interface 接口名 extends if1,if2{}
        6、一个类可以在继承父类的同时实现其它接口
            如:class test extends testbase implements test1,test2{}
 
实现接口VS继承类
php的继承是单一继承,也就是一个类只能继承一个父类,这样对子类功能的扩展有一定的影响。实现接口可以看做是对继承类的一个补充。继承是层级的关系,不太灵活,而实现接口是平级的关系,实现接口可以在不打破继承关系的前提下,对某个功能扩展,非常灵活。
 
三、Final
 
1、如果我们希望某个类不被其它的类继承(比如为了安全原因等。。),那么可以考虑使用final
    语法:
            final class A{}
2、如果我们希望某个方法,不被子类重写,可以考虑使用final来修饰,final修饰的方法还是可以继承的,因为方法的继承权取决于public的修饰
    如:class A{
                final public function getrate($salary){
                    return $salary*0.08;
                }
            }
            class B extens A{
                //这里父类的getrate方法使用了final,所以这里无法再重写getrate
                //public function getrate($salary){
                //    return $salary*0.01;
                //}
            }
   3、final不能用来修饰属性        
 
四、类常量(const)
 
在某些情况下,可能有这样的需求:当不希望一个成员变量被修改,希望该变量的值是固定不变的,这时可以使用const常量(常量名应该全用大写,并且不带$符号,常量不可以加修饰符)
语法:
        const 常量名=常量值;  //必须赋初值,因为常量是不能修改的
调用:
        类名::常量名[本类内部可用self::常量名]   或者  接口名::常量名  //接口中只能使用常量,不能使用变量
 
如:
 
class A{
    const TAX_RATE=0.08;
    function paytax($salary){
        return $salary*self::TAX_RATE;
    }
}
$a=new A();
echo $a->paytax(100);
 
注:
    1、常量可以被子类继承
    2、常量是属于某个类的,而不属于某个对象

 

摘自 贝尔的技术博客
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles