iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中trait的基础语法
  • 770
分享到

PHP中trait的基础语法

2023-06-06 19:06:37 770人浏览 薄情痞子
摘要

小编给大家分享一下PHP中trait的基础语法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 类中的某些成员如何才能被其他类使用呢?使用继承的话,这继承

小编给大家分享一下PHP中trait的基础语法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

 类中的某些成员如何才能被其他类使用呢?使用继承的话,这继承链也太长了,php提供了代码复用技术trait。

1.定义Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。trait可以使得单继承语言拜托为了复用而不得不继承的尴尬,让面向对象变得更加纯粹。

2.基础语法

trait是一种类似class的关键字。

<?php     trait Eat{        public $a=10;      //trait内允许有类的成员属性(包括静态属性),成员方法(包括静态方法)        public static $b=666;        //const c=3.14;       //trait内不允许有常量        protected $e;//允许定义,但是实际不用        private $f;        public function getA()        {               echo $this->a,"<br>";        }        public static function getB()        {               echo self::$b,"<br>";        }    }?>

trait是用来实现代码的复用的,不可以被实例化也不可以被继承(不是类)。

<?php   trait Eat{}  // $a=new Eat;//报错  //calss A extends Eat{}//报错?>

 3.trait的使用

trait只是一段代码的集合,使用时必须要使用use进行引用。

<?php        trait Eat{        public $a=10;        public static $b=666;        //const c=3.14;        public function getA()        {               echo $this->a,"<br>";        }        public static function getB()        {               echo self::$b,"<br>";        }    }        class A{        use Eat;        public function getC()        {            echo $this->a,"<br>";        }    }    $boy=new A();    $boy->getC();    $boy->getA();    $boy->getB();?>

一个类可以使用多个trait。

<?php   trait A1{   }   trait A2{   }   class People{     use A1,A2;   }?>

 4.trait使用的问题

    a.如果同时引入的多个trait中有同名属性,那么会产生冲突。

<?php    trait A1{       public $a=11;    }    trait A2{       public $a=22;    }    class A3{        use A1,A2;//不允许同名属性        public function geta(){            echo $this->a;        }    }    $example=new A3();  ?>

b.如果同时引入的多个trait中有同名方法,那么会产生冲突,有两种方案解决如A3、A4。

<?php    trait A1{       public $a=11;       public function eat(){           echo "A1中eat()方法","<br>";       }    }    trait A2{       public $b=22;       public function eat(){        echo "A2中eat()方法","<br>";      }    }    class A3{        use A1,A2{          A1::eat insteadOf A2; //A1中的eat替代A2中的eat        }    }    class A4{        use A1,A2{            A1::eat insteadOf A2;//A1中的eat替代A2中的eat            A2::eat as eat2;     //A2中的eat取别名eat2          }    }    $example=new A3();    $example->eat();    $example=new A4();    $example->eat2();?>

c.同名覆盖问题:如果类中有与引入的trait同名成员,会有不同处理:

  • 属性:不允许重名,即类中不允许定义与trait中同名的成员属性(静态属性也一样)。

  • 方法:类覆盖trait。

d.继承覆盖问题:如果类中在使用trait的同时,也是继承自父类,而trait中与父类中有同名方法,那么trait中将覆盖父类同名方法;如果要访问父类方法,可以在trait同名方法中使用parent关键字访问父类同名方法。

<?php    trait Eat{    public function eat(){        echo 'Eat::eat';    }}    class Human{    public function eat(){        echo 'Human::eat';    }}//子类继承父类同时使用traitclass Man extends Human{    use Eat;}$m = new Man();$m->eat();?>

e.trait自己不能访问,只是用来给其他类提供代码复用的,因此允许类在使用trait时更高里面方法的访问控制权:在as之后,使用目标访问修饰限定符。

<?phptrait Eat{    private function show(){        echo 'eat';    }}class Human{    use Eat{        show as public eshow;        //注意:as是用来设定别名的,虽然没有同名show,但是系统认为show已经存在,所以必须别名,权限的更改的方法不是        //本尊    }}$h = new Human();$h->eshow();//eat?>

f.trait中可以使用抽象方法,用来规范使用类必须实现对应抽象方法:使用类要么为抽象类,要么就必须实现抽象方法。

<?php   trait Eat{     public function eat();//抽象方法   }   abstract class Human{    use Eat;//抽象类:可以不实现抽象方法   }   class Animal{    use Eat;    public function eat(){//具体类:实现抽象方法        echo 'Animal::eat';    }}?>

以上是“PHP中trait的基础语法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网PHP编程频道!

--结束END--

本文标题: PHP中trait的基础语法

本文链接: https://www.lsjlt.com/news/248252.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP中trait的基础语法
    小编给大家分享一下PHP中trait的基础语法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 类中的某些成员如何才能被其他类使用呢?使用继承的话,这继承...
    99+
    2023-06-06
  • PHP语法基础
    学习目标/Target       掌握PHP标记、标识符、输出语句的使用,能够熟练编写简单的PHP程序       熟悉注释和关键字的使用,能够在程序中正确使用注释和关键字      掌握变量、常量和表达式的使用,能够在程序中正确使...
    99+
    2023-10-07
    服务器 开发语言 php
  • PHP基础语法(上)
    目录 前言 一、基础语法 1.1 标记 1.2 输出语句 1.2.1 echo 1.2.2 print 1.3 注释 1.3.1 单行注释 1.3.2 多行注释 1.4 标识符 1.5 关键字 二、数据与运算 ...
    99+
    2023-10-18
    php 开发语言 后端 青少年编程 笔记
  • php语法基础有哪些
    这篇文章主要为大家展示了“php语法基础有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php语法基础有哪些”这篇文章吧。关键字global: &...
    99+
    2024-04-02
  • PHP中Trait的用法介绍
    本篇内容介绍了“PHP中Trait的用法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 继承 VS 多态 VS Trait现在有Pu...
    99+
    2023-06-17
  • PHP的学习笔记 (php的基础语法)
    目录 一、PHP基础语法 01.基础语法     1.标记与注释     2.输出语句     3.PHP标识符     4.PHP关键字 02.数据与运算     1.常量     2.变量     3.表达式     4.数据类型及转...
    99+
    2023-08-31
    php 前端
  • PHP入门指南:PHP基础语法
    PHP是一种服务器端脚本语言,它被用来开发动态网站、Web应用程序和网页程序。PHP的应用范围非常广泛,无论是初学者还是有经验的开发人员,都可以从中获益。本文将为您提供PHP的基础语法入门指南。如果您想学习PHP编程,并且从头开始打好基础,...
    99+
    2023-05-20
    PHP入门 PHP语法 基础编程
  • php中trait的使用方法
    这篇文章主要介绍了php中trait的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用...
    99+
    2023-06-15
  • python的基础语法
    python数据类型:(按特征划分) 数字类型:1. ×××:布尔形、长整型L、标准×××2. 非×××:双精度型、复数、decimal(不是内建类型) 序列类型:1. 字符串(str)2. 元组(tuple)3. 列表(list) 映像类...
    99+
    2023-01-31
    语法 基础 python
  • Python基础篇-Python基础语法
    为什么学习pythonhttp://www.apelearn.com/bbs/thread-7739-1-1.html Python的安装 getconf LONG_BIT     查看系统版本多少位 rpm -q python uname...
    99+
    2023-01-31
    基础 语法 Python
  • PHP trait的使用方法
    trait、继承和实例化的区别: 对于当前一个类需要用到另一个或多个类的方法的情况,我们一般会想到的方式有继承、直接实例化另外一个或多个类等等的方法,下面来对比一下这些方法和Trait类的区别: 1、继承方式:对于继承,可以完美地复用另一...
    99+
    2023-09-02
    php 开发语言
  • PHP基础语法知识有哪些
    本篇内容主要讲解“PHP基础语法知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP基础语法知识有哪些”吧!转义到PHPPHP解析引擎需要一种方法来区分PHP代码和页面中的其他元素。这...
    99+
    2023-06-04
  • python语法基础
    注释 在python中,注释是以任何存在于#右侧的文字,其主要作用是写给程序读者看的笔记。 例如 单行注释 >>print("hello world") #这是一个注释 多行注释使用一对''' ''' 这是注释 这是注释 这...
    99+
    2023-01-31
    语法 基础 python
  • Java 基础语法
    目录1、基本语法2、标识符(合法的变量名)3、关键字(保留字)4、注释5、Java 包5.1 package 语句5.2 import 语句6、源文件声明规则前言: Java 是一...
    99+
    2024-04-02
  • python3------基础语法
    1 注释 1.1 以#号开头的注释(单行注释) 1.2 以""" 注释内容 """ (多行注释) 1.3 以 ''' 注释内容''' (多行注释)2 行与缩进   python代码块通过缩进对齐表达代码逻辑而不是使用大括号;   缩进表达一...
    99+
    2023-01-31
    语法 基础
  • python3 基础语法
    python相关文章请移步简书:http://www.jianshu.com/u/a72d0d3b2176 ...
    99+
    2023-01-31
    语法 基础
  • Java基础语法
    文章目录 1. Java概述1.1 Java语言发展史1.2 Java语言跨平台原理1.3 JRE和JDK1.4 JDK的下载和安装1.4.1 下载1.4.2 安装1.4.3 JDK的安装目录介绍 2. 第一个演示程序2....
    99+
    2023-08-19
    intellij-idea java
  • python基础语法
    保留字也叫做关键字,不能把它们用在任何标识符名称,可以使用以下命令来查看python的保留字 1 import keyword 2 print(keyword.kwlist) int、float、complex 1 # i...
    99+
    2023-01-30
    语法 基础 python
  • Python的基础语法(一)
    0. 前言 最近正在重新整理Python的基础知识,以便更好地学习新知识。这一部分主要是讲述Python基础语法的演示。下面的语法都是基于Python3的语法。 1. 注释 注释:Python的注释方法有两种: 单行注释: # 你添加...
    99+
    2023-01-31
    语法 基础 Python
  • Python的基础语法(二)
    0. 前言 接着上一篇博客的内容,我将继续介绍Python相关的语法。部分篇章可能不只是简单的语法,但是对初学者很有帮助,也建议读懂。 1. 表达式 由数字、符号、括号、变量等组成的组合。 算术表达式 逻辑表达式 赋值表达式 在Pyth...
    99+
    2023-01-31
    语法 基础 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作