【问题标题】:Trait has same static method as my class - how to resolve?Trait 与我的类具有相同的静态方法 - 如何解决?
【发布时间】:2021-11-01 20:19:23
【问题描述】:

在我的课堂上,我使用了一个名为 PlankMediable 的 trait,它有一个方法 public static function bootMediable()

不幸的是,我的班级还有一个名为protected static function bootMediable()的方法。

  1. 我如何给这个类起别名,因为一个是公共静态的,另一个是受保护的静态的?这行得通吗?
use PlankMediable  {
    PlankMediable::bootMediable as PlankMediable_bootMediable;
}
  1. 如何从我的类protected static function bootMediable() 类中调用静态方法?

【问题讨论】:

  • 第一个问题,你试过了吗?发生了什么?对于问题 2,请记住一个特征是“编译器辅助复制和粘贴”,一旦导入,这些方法就是您的类的一部分,并且可以像任何其他方法一样被调用。所以再试一次,如果您遇到任何您不理解的错误,请告诉我们。

标签: php


【解决方案1】:

是的,您可以使用 use 定义别名。看看下面的例子:

trait SayWorld {
    public static function sayHello() {
        echo __METHOD__." from trait";
    }
}

class MyHelloWorld {
    use SayWorld{
     SayWorld::sayHello as traithello;
    }

    public static function sayHello() {
        echo __METHOD__." from class";
    }

    public static function callFromTrait() {
        self::traithello();
    }
}

    MyHelloWorld::traithello();  //SayWorld::sayHello from trait
    MyHelloWorld::sayhello();  //MyHelloWorld::sayHello from class
    MyHelloWorld::callFromTrait();  //SayWorld::sayHello from trait

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多