PHP中关于trait使用方法的详细介绍

PHP中关于trait使用方法的详细介绍

php中文网最新课程

每日17点准时技术干货分享

PHP中关于trait使用方法的详细介绍

PHP中关于trait使用方法的详细介绍

说通俗点,PHP中使用trait关键字是为了解决一个类既想集成基类的属性和方法,又想拥有别的基类的方法,而trait一般情况下是和use搭配使用的。

请看下面的示例代码

<?php

    header("Content-type:text/html;charset=utf-8");

    trait Drive {                      //使用trait 创建一个基类

    public $carName = 'trait';         //定义一个变量

    public function driving() {        //定义一个方法

    echo "driving {$this->carName}<br>";

        }

    }

    class Person {                    //创建一个基类

        public function eat() {         //定义一个方法

            echo "eat<br>";

            }

    }

    class Student extends Person {    //创建一个子类继承Person类

        use Drive;                      //使用trait定义的类Drive

        public function study() {        //定义一个方法

            echo "study<br>";

            }

    }

    $student = new Student();     //创建对象

    $student->study();            //调用自己定义的方法

    $student->eat();              //调用父类方法

    $student->driving();          //调用trait定义的类Drive的方法

?>

运行效果图如图所示

PHP中关于trait使用方法的详细介绍

上面的例子中,Student类通过继承Person,有了eat方法,通过组合Drive,有了driving方法和属性carName。

如果Trait基类本类中都存在某个同名的属性或者方法,最终会保留哪一个呢?

<?php

    header("Content-type:text/html;charset=utf-8");

        trait Drive {                  //使用trait定义一个类

        public function hello() {    //定义一个方法

            echo "我是trait类的方法hello()<br>";

        }

        public function driving() {

            echo "我是trait类的方法driving()<br>"; //定义一个方法

        }

    }

    class Person {                //创建父类

        public function hello() {    //定义一个方法

            echo "我是父类的方法hello()<br>";

        }

        public function driving() {      //定义一个方法

            echo "我是父类的方法driving()<br>";

        }

    }

    class Student extends Person {         //创建子类继承Person类

        use Drive;                           //使用trait定义的类Drive

        public function hello() {             //定义一个方法

            echo "我是子类的方法hello()<br>";

        }

      }

    $student = new Student();            //创建对象

    $student->hello();                    //调用hello方法

    $student->driving();                  //调用deiving方法

?>

运行效果如图所示

PHP中关于trait使用方法的详细介绍因此得出结论:当方法或属性同名时,当前类中的方法会覆盖 trait的 方法,在这个例子中也就是student的hello()方法覆盖了trait中的hello()方法。 trait 的方法又覆盖了基类中的方法在这个例子中,trait的driving()方法就是覆盖了Person类中driving()方法。

-END-

声明:本文选自「 php中文网 」,搜索「 phpcnnew 」即可关注!

请点击下方:“阅读原文”,在线查看全部文章内容!

未经允许不得转载:PHP100中文网 - 中国第一档PHP资源分享门户 » PHP中关于trait使用方法的详细介绍

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏