【问题标题】:PHP: A static variant of the magic method __toString()?PHP:魔术方法 __toString() 的静态变体?
【发布时间】:2016-07-07 17:34:55
【问题描述】:

我想以静态方式使用 PHP 的 __toString() 方法,如下所示:

class MyClass {
    public static function __toString() {
        echo 'Hello, I am MyClass!';
    }
}

echo (string) MyClass;

不幸的是,__toString() 不能是静态方法。如果这是可能的,那就太好了,所以我的问题是:作为对 PHP 开发人员的功能请求,这是否合理?如果不是,我们如何才能实现与我的示例描述的尽可能接近的这种功能?

【问题讨论】:

  • 你为什么需要这个?我真的想不出一个用例。
  • 用例示例:在 Yii2 中,所有基于对象的类都带有一个静态的className() 方法。它所做的只是返回被调用的类字符串。使用静态 __toString() 将不再需要该方法。
  • MyClass::class 呢?
  • @tkausl 这适用于这个特定的用例是的!
  • 另见 PHP 内置的 get_class 方法。 php.net/get_class

标签: php static-methods tostring


【解决方案1】:

你可以写:

echo MyClass::class;

或者如果您需要更多控制:

class MyClass
{
    public static function getClass()
    {
        return get_class();
    }
}

echo MyClass::getClass();

如果你想拥有一个静态类属性,你可以使用这个:

class MyClass {
    static $name = self::class;
}

echo MyClass::$name;

另见this answer

【讨论】:

  • 不完美,因为我们无法修改字符串,但我想它会尽可能好。
  • 添加了一个提供更多控制权的替代方案。
  • 这也不理想,因为我们不能在声明类属性时使用它(例如public $var = MyClass::getClass();)。
  • 我在答案中添加了一种使用类属性的方法。
猜你喜欢
  • 1970-01-01
  • 2015-01-04
  • 2012-01-21
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 2013-03-03
  • 2023-03-14
  • 2010-10-27
相关资源
最近更新 更多