说浅显点,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的要领 ?>
运转结果图如图所示
上面的例子中,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要领 ?>
运转结果如图所示
因而得出结论:当要领或属性同名时,当前类中的要领会掩盖 trait的 要领,在这个例子中也就是student的hello()要领掩盖了trait中的hello()要领。而 trait 的要领又掩盖了基类中的要领。在这个例子中,trait的driving()要领就是掩盖了Person类中driving()要领。
假如想相识更多php的相干学问能够到网站的php模块中去进修更多有意思的学问。
以上就是PHP中关于trait运用要领的细致引见的细致内容,更多请关注ki4网别的相干文章!