代码之家  ›  专栏  ›  技术社区  ›  Sugumar Venkatesan

php:如何使用3个以上相同函数名的特性?我想使用所有相同的名称函数

php
  •  1
  • Sugumar Venkatesan  · 技术社区  · 6 年前

    trait mytrait1{
      public function triatfunction(){
        echo 'trait function1';
      }
    }
    trait mytrait2{
      public function triatfunction(){
        echo 'trait function2';
      }
    }
    
    class ParentClass{
        public function parentfunction(){
            echo 'parent function';
        }
    }
    
    class ChildClass extends ParentClass{
        use mytrait1,mytrait2{
            mytrait1::triatfunction as  triatfunction1; 
            mytrait2::triatfunction as  triatfunction2;     
        }
        public function childfunction(){
            echo 'child function';
        }
    }
    
    
    $obj = new ChildClass();
    
    $obj->parentfunction();
    echo '<br>';
    $obj->childfunction();
    echo '<br>';
    $obj->triatfunction1();
    echo '<br>';
    $obj->triatfunction2();
    


    但是如果改变

        use mytrait1,mytrait2{
            mytrait1::triatfunction as  triatfunction1; 
            mytrait2::triatfunction as  triatfunction2;     
        }
    

        use mytrait1,mytrait2{
            mytrait1::triatfunction insteadof mytrait2; 
            mytrait2::triatfunction as  triatfunction2;     
        }
    

    和使用

    $obj->triatfunction();
    echo '<br>';
    $obj->triatfunction2();
    

    它起作用了。


    现在我有三个具有相同名称的函数的特性。

    我怎样才能在我的功能的所有不同特征中使用这三个功能呢?

    trait mytrait1{
      public function triatfunction(){
        echo 'trait function1';
      }
    }
    trait mytrait2{
      public function triatfunction(){
        echo 'trait function2';
      }
    }
    trait mytrait3{
      public function triatfunction(){
        echo 'trait function3';
      }
    }
    
    class ParentClass{
        public function parentfunction(){
            echo 'parent function';
        }
    }
    
    class ChildClass extends ParentClass{
        use mytrait1,mytrait2,mytrait3{
            mytrait1::triatfunction insteadof mytrait2; 
            mytrait2::triatfunction as traitfunction1;  
            mytrait3::triatfunction as  triatfunction2;     
        }
        public function childfunction(){
            echo 'child function';
        }
    }
    
    
    $obj = new ChildClass();
    
    $obj->parentfunction();
    echo '<br>';
    $obj->childfunction();
    echo '<br>';
    $obj->triatfunction();
    echo '<br>';
    $obj->triatfunction1(); 
    echo '<br>';
    $obj->triatfunction2(); 
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Sugumar Venkatesan    6 年前

    您需要添加到 insteadof

    mytrait2 mytrait3 as 正在创建别名,但无法解决冲突。

    someMethod A::someMethod insteadof B, C, D;

    trait mytrait1{
      public function triatfunction(){
        echo 'trait function1';
      }
    }
    trait mytrait2{
      public function triatfunction(){
        echo 'trait function2';
      }
    }
    trait mytrait3{
      public function triatfunction(){
        echo 'trait function3';
      }
    }
    
    class ParentClass{
        public function parentfunction(){
            echo 'parent function';
        }
    }
    
    class ChildClass extends ParentClass{
        use mytrait1,mytrait2,mytrait3{
            mytrait1::triatfunction insteadof mytrait2, mytrait3; 
            mytrait2::triatfunction as triatfunction1;  
            mytrait3::triatfunction as triatfunction2;     
        }
        public function childfunction(){
            echo 'child function';
        }
    }
    
    
    $obj = new ChildClass();
    
    $obj->parentfunction();
    echo '<br>';
    $obj->childfunction();
    echo '<br>';
    $obj->triatfunction();
    echo '<br>';
    $obj->triatfunction1(); 
    echo '<br>';
    $obj->triatfunction2();