博客列表 >trait命名冲突解决、trait中改变trait成员中的访问控制、trait与接口,抽象类联合编程

trait命名冲突解决、trait中改变trait成员中的访问控制、trait与接口,抽象类联合编程

昔年
昔年原创
2020年05月07日 15:07:16821浏览

1、trait同名方法的命名冲突解决以及trait中改变trait成员的访问控制

<?php

trait tDemo1
{
    public function index()
    {
        echo __TRAIT__ . '=====>' . '首页';
    }
}


trait tDemo2
{
    public function index()
    {
        echo __TRAIT__ . '=====>' . '首页';
    }
}


trait tDemo3
{
    public function update()
    {
        echo __TRAIT__ . '====>' . '更新';
    }
}

trait tDemo4
{
    use tDemo1, tDemo2 {
        // 1. 替代
        tDemo1::index insteadof tDemo2;
        //2.重命名
        tDemo2::index as in2;
    }

    //修复访问权限
    use tDemo3 {
        update as protected up;
    }
}

class User
{
    use tDemo4;
}
//客户端
$user = new User;
$user->index();
echo '<br>';
$user->in2();
echo '<br>';
$user->up();
echo '<br>';

demo1.png

2.trait与抽象类、接口联合编程

<?php
interface iDemo
{
    public function sayHello();
    public function sayWord();
}


trait tDemo
{
    public function sayByebye()
    {
        echo 'ヾ(ToT)Bye~Bye~<br>';
    }
}

abstract class aDemo implements iDemo
{
    public function sayHello()
    {
        echo 'Hello<br>';
    }
}

class MyHelloWorld extends aDemo
{
    use tDemo;
    public function sayWord()
    {
        echo 'Word<br>';
    }
}

$my = new MyHelloWorld;
$my->sayByebye();
$my->sayHello();
$my->sayWord();

demo2.png


总结:trait同名冲突时有两种解决办法,一种是通过替代的方式来解决;另外一种是把其中一个方法的进行更名。

         使用trait时也可以进行相应的访问权限的变更。

        接口、抽象类、trait混合编程时,可以在接口中声明方法,然后抽象类中选择实现全部或者部分方法;trait则方便的实现了代码复用,一些常用的功能就可以放到trait中,需要使用时直接引入trait就行。



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议