Home Backend Development PHP Tutorial Instructions for using Trait in php

Instructions for using Trait in php

Jun 28, 2018 pm 03:17 PM

* What is Trait?

* 1. Trait is a code reuse mechanism tailored for single inheritance languages;

* 2. Previously, code could be implemented through functions or classes Reuse;

* 3. Trait can be simply understood as a collection of class methods, working between the parent class and subclass;

* 4. But trait is not limited to methods Collections also support abstraction, static and attributes;

* 5. The current class members will overwrite the trait class members, and the members in the trait can override the class members with the same name

* 6. Important Tip: Trait is not a class and cannot be instantiated. Remember

//Declare the parent class: Person

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

if (!class_exists('Person')) {

  class Person

    {

        protected $name;

         

        public function __construct($name='小明')

        {

            $this->name = $name;

        }

         

        public function study($course='php')

        {

            return $this->name.'在学习'.$course;

        }

     

         

    

}

Copy after login

//Declare the trait class: Course Course

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

if(!trait_exists('Course')){

    trait Course

    {

        //trait中也可以自己的属性

        public $friend='小华';

        public function sport($name='踢足球')

        {

//            return $this->name.'在学习'.$name;

            //trait中可以访问父类中的属性

            return $this->name.'和'.$this->friend.'在学习'.$name;

        }

         

        //trait中同样支持抽象,以及静态方法,我放在一起写了

        //我把这个方法声明为抽象的同时,也声明为静态

        abstract public static function hobby($name);

         

         

        //在trait中也声明一个与父类同名的study()方法,参数修改一下以示区别

        public function study($course='java')

        {

            return $this->name.'在学习'.$course;

        }

    }

}

Copy after login


//Declare trait class: Recreation Entertainment

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

if(!trait_exists('Recreation')){

    trait Recreation

    {

        //这个trait类中也声明一个与Course中同名的方法sport

        //注意: 属性$friend不允许与Course::sport()同名

        //因为目前trait中还没有处理同名属性的机制,期待新版本会解决

        //这里我们将$friend 修改为 $friend1

        public $friend1='小军';

        public function sport($name='打蓝球')

        {

//            return $this->name.'在学习'.$name;

            //trait中可以访问父类中的属性

            return $this->name.'和'.$this->friend1.'在学习'.$name;

        }

         

         

    }

}

Copy after login

Declare subclass: Student, inherited from parent class: Person

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

class Student extends Person

{

    //导入trait类

//    use Course;

     

    //子类支持导入多个trait类,但不可避免的会遇到方法重名问题,怎么解决呢?

//    use Course, Recreation;  //同时引入二个trait类

    //如果这二个trait类中有重名方法,要用以下语句结构解决

    use Course, Recreation {

        //访问sport()方法冲突时,使用Course::sport()代替掉Recoreation::sport()

        Course::sport insteadof Recreation;

        

        //再访问Recoreation::sport()时启用别名 mySport()

        Recreation::sport as mySport;

    }

     

    //子类中必须实现trait中声明的抽象方法hobby()

    public static function hobby($name)

    {

        return $name;

    }

     

    //在子类中再声明一个与trait类同名的study()方法,参数修改一下以示区别

    public function study($course='python')

    {

        return $this->name.'在学习'.$course;

    }

     

}

Copy after login


/ /Instantiate the Student class

1

$student = new Student();

Copy after login

//1. Access the methods in the parent class Person

1

2

echo $student->study();

echo &#39;<hr>&#39;;

Copy after login
Copy after login

//2. Access the methods in the trait class

1

2

echo $student->sport();

echo &#39;<hr>&#39;;

Copy after login

//3 To call abstract static methods in a trait, you must use Student to access them

1

2

echo Student::hobby(&#39;抽烟喝酒烫头&#39;);

echo &#39;<hr>&#39;;

Copy after login

//4. When a trait has a method with the same name as the parent class, the trait priority is higher

1

echo $student->study();

Copy after login

// 5. When there is a method with the same name as the trait class in a subclass, the subclass has a higher priority

1

2

echo $student->study();

echo &#39;<hr>&#39;;

Copy after login
Copy after login

//6. The subclass can obtain method sets from multiple traits

1

2

3

echo $student->sport();

echo &#39;<hr>&#39;;

echo $student->mySport();

Copy after login

The above is the detailed content of Instructions for using Trait in php. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? Apr 03, 2025 am 12:03 AM

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.

See all articles