0

0

速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait - webabcd

php中文网

php中文网

发布时间:2016-05-20 10:14:49

|

1495人浏览过

|

来源于php中文网

原创

[源码下载]


速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait



作者:webabcd


介绍
速战速决 之 PHP

  • 类基础
  • 抽象类
  • 接口
  • trait



示例
1、类的相关知识点 1(基础)
class/class1.php

php
/**
 * 类的相关知识点 1(基础)
 *
 * 规范:命名空间与目录路径对应,类名与文件名对应,文件以 .class.php 为后缀名
 */

class MyClass1
{
    // 类常量,没有“$”符号,不能被覆盖
    const MyConstant = 'constant value';
    // 静态属性
    static $myStaticProperty = "static property";

    // 对于属性和方法的访问控制有 private protected public(默认值)
    private $_name;
    private $_age;

    // 构造函数
    // PHP 中的魔术方法(magic method)均以 __(两个下划线)开头(类似的还有 __destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state() 和 __clone() 等)
    function __construct()
    {
        echo "MyClass1 construct";
        echo "
"; // 获取参数个数 $args_num = func_num_args(); if ($args_num == 1) { // $this 代表当前对象,是指向类实例的指针 $this->_name = func_get_arg(0); } else if ($args_num == 2) { $this->_name = func_get_arg(0); $this->_age = func_get_arg(1); } else { } } // 析构函数 function __destruct() { print "MyClass1 destruct"; echo "
"; } // 构造函数,此种方式在 PHP 5.3.3 或以上可支持 // 此种方式的构造函数也可以当做方法被调用 public function MyClass1() { echo "i am not a construct, i am a method"; } // 静态方法 public static function myStaticMethod() { return "static method"; } // 方法 public function getInfo() { // $this 代表当前对象,是指向类实例的指针 return "name: " . $this->_name . ", age: " . $this->_age; } // 不直接支持方法的重载(overload),可以通过相关的魔术方法来实现(参见:class3.php) // public function getInfo($name) { } // 带参数类型约束的方法,类型约束不能用于 int 或 string 之类的标量类型 // 本例约束了参数 $ary 必须是 array 类型 public function getFirst(array $ary) { return $ary[0]; } } // 被声明为 final 的类或属性或方法,无法继承 // 只能继承一个类 final class MyClass2 extends MyClass1 { // 构造函数可以为参数设置默认值(方法或函数也可以为参数设置默认值) function __construct($name = "wanglei", $age = 100) { echo "MyClass2 construct"; echo "
"; // parent 代表当前类的基类 parent::__construct($name, $age); // self 代表当前类 // $this 代表当前对象,是指向类实例的指针 } // 析构函数 function __destruct() { print "MyClass2 destruct"; echo "
"; parent::__destruct(); } // 覆盖基类的同名方法(override) public function getInfo() { // $this 代表当前对象,指向类实例的指针 return "MyClass2 - " . parent::getInfo(); } } // 类的实例化 $objClass1 = new MyClass1("webabcd", 35); // 通过 -> 调用实例方法或实例属性 echo $objClass1->getInfo(); echo "
"; // 通过 -> 调用实例方法或实例属性(MyClass1() 是构造函数,也可以当做方法被调用) echo $objClass1->MyClass1(); echo "
"; $objClass2 = new MyClass2(); echo $objClass2->getInfo(); echo "
"; // instanceof - 用于判断一个对象是否是指定类的实例 if($objClass2 instanceof MyClass1) { echo '$objClass2 instanceof MyClass1'; echo "
"; } // 通过 :: 调用类常量或静态属性或静态方法 echo MyClass1::MyConstant; echo "
"; // 通过 :: 调用类常量或静态属性或静态方法 echo MyClass1::$myStaticProperty; echo "
"; // variable class(可变类),将变量的值作为类名 $className = 'MyClass1'; // variable method(可变方法),将变量的值作为方法名 $methodName = 'myStaticMethod'; // 通过 :: 调用类常量或静态属性或静态方法 echo $className::$methodName(); echo "
"; // 调用带参数类型约束的方法 echo $objClass1->getFirst(array("a", "b", "c")); echo "
";


2、类的相关知识点 2(抽象类,接口,trait)
class/class2.php

磁力开创
磁力开创

快手推出的一站式AI视频生产平台

下载
php
/**
 * 类的相关知识点 2(抽象类,接口,trait)
 */

// 抽象类
abstract class MyAbstractClass
{
    // 抽象方法,子类必须定义这些方法
    abstract protected function getValue1();
    abstract public function getValue2($param1);

    // 普通方法(非抽象方法)
    public function getValue0()
    {
        return "getValue0";
    }
}

// 接口
interface MyInterface1
{
    // 接口常量,不能被覆盖
    const MyConstant = 'constant value';
    public function getValue3();
}

// 接口
interface MyInterface2 extends MyInterface1
{
    public function getValue4();
}

// 接口
interface MyInterface3
{
    public function getValue5();
}

// trait(可以 use 多个,允许有实现代码,但是本身不能实例化)
trait MyTrait1
{
    // 可以具有方法,静态方法,属性等
    function getValue6()
    {
        return "getValue6";
    }
}

// trait(可以 use 多个,允许有实现代码,但是本身不能实例化)
trait MyTrait2
{
    // 抽象方法(use 这个 trait 的类必须要定义这个方法)
    abstract function getValue7();
}

// trait(可以 use 多个,允许有实现代码,但是本身不能实例化)
trait MyTrait3
{
    function getValue6()
    {
        return "getValue6";
    }

    function getValue8()
    {
        return "getValue8";
    }
}

// 必须实现所有抽象方法和接口方法
// 类只能单继承,接口可以多继承
class MyClass1 extends MyAbstractClass implements MyInterface2, MyInterface3
{
    // 可以 use 多个 trait
    use MyTrait1, MyTrait2;
    use MyTrait3
    {
        // 多 trait 间有重名的,可以指定以哪个为准
        MyTrait1::getValue6 insteadof MyTrait3;
        // 可以为 trait 的指定方法设置别名(调用的时候用方法名也行,用别名也行)
        MyTrait3::getValue8 as alias;
    }

    // 可以将 protected 升级为 public
    public function getValue1()
    {
        return "getValue1";
    }

    // 可以加参数,但是加的参数必须要有默认值
    public function getValue2($param1, $param2 = 'param2')
    {
        return "getValue2, {$param1}, {$param2}";
    }

    public function getValue3()
    {
        return "getValue3";
    }

    public function getValue4()
    {
        return "getValue4";
    }

    public function getValue5()
    {
        return "getValue5";
    }

    public function getValue7()
    {
        return "getValue7";
    }
}

// 调用接口常量
echo MyInterface1::MyConstant;
echo "
"; $myClass1 = new MyClass1; echo $myClass1->getValue0(); echo "
"; echo $myClass1->getValue1(); echo "
"; echo $myClass1->getValue2("webabcd"); echo "
"; echo $myClass1->getValue3(); echo "
"; echo $myClass1->getValue4(); echo "
"; echo $myClass1->getValue5(); echo "
"; echo $myClass1->getValue6(); echo "
"; echo $myClass1->getValue7(); echo "
"; echo $myClass1->getValue8(); echo "
"; echo $myClass1->alias(); echo "
";



OK
[源码下载]

立即学习PHP免费学习笔记(深入)”;

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

109

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

16

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

136

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

7

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

6

2026.01.26

2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】
2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】

铁路12306提供起售时间查询、起售提醒、购票预填、候补购票及误购限时免费退票五项服务,并强调官方渠道唯一性与信息安全。

122

2026.01.26

个人所得税税率表2026 个人所得税率最新税率表
个人所得税税率表2026 个人所得税率最新税率表

以工资薪金所得为例,应纳税额 = 应纳税所得额 × 税率 - 速算扣除数。应纳税所得额 = 月度收入 - 5000 元 - 专项扣除 - 专项附加扣除 - 依法确定的其他扣除。假设某员工月工资 10000 元,专项扣除 1000 元,专项附加扣除 2000 元,当月应纳税所得额为 10000 - 5000 - 1000 - 2000 = 2000 元,对应税率为 3%,速算扣除数为 0,则当月应纳税额为 2000×3% = 60 元。

35

2026.01.26

oppo云服务官网登录入口 oppo云服务登录手机版
oppo云服务官网登录入口 oppo云服务登录手机版

oppo云服务https://cloud.oppo.com/可以在云端安全存储您的照片、视频、联系人、便签等重要数据。当您的手机数据意外丢失或者需要更换手机时,可以随时将这些存储在云端的数据快速恢复到手机中。

121

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

第二十四期_PHP8编程
第二十四期_PHP8编程

共86课时 | 3.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号