【问题标题】:PHP static function being called in dynamic environment在动态环境中调用 PHP 静态函数
【发布时间】:2014-07-17 05:34:58
【问题描述】:

什么时候 PHP 允许像动态函数一样调用静态函数?

我使用的是 php 5.3.2

class weird{

    public static function iamstatic($calledFrom){
            echo "I am  a static function called with  a $calledFrom operator\n";
    }

    public function test(){
            self::iamstatic("static");
            $this->iamstatic("dynamic");
    }

 }

$c = new weird();
$c->test();

weird::iamstatic("Static outside class");
$c->iamstatic("Dynamic outside class");

这个输出:

I am  a static function called with  a static operator
I am  a static function called with  a dynamic operator
I am  a static function called with  a Static outside class operator
I am  a static function called with  a Dynamic outside class operator

【问题讨论】:

  • 最好使用non static 定义。

标签: php class dynamic static-methods


【解决方案1】:

php5.0及以上版本总是可以的。

http://3v4l.org/14PYp#v500

另外,文档中也提到了 (static)

将类属性或方法声明为静态使它们可以访问 不需要类的实例化。声明为的属性 static 不能用实例化的类对象访问(尽管 静态方法可以)。

这不是错误 (static methods assigned to instances)

【讨论】:

  • 好点,虽然我认为这个(没有错误)真的很臭名昭着......例如,我正在阅读我的代码,认为这个方法定义是动态的。意识到这是一种静态方法,我真的很惊讶。我认为这很糟糕,因为它可能使开发人员认为该方法被声明为动态的,尽管如果没有实例化就无法从类外部访问。
  • @Coluhuru,我不这么认为,因为我正在使用它(不影响对象状态的辅助方法)。
  • 它对你有用,因为它们受到保护。
  • @Coluhuru,对不起。仅不受保护(经过一些研究)。
  • @Coluhuru ,你得到答案了吗?
【解决方案2】:

我不知道这是可能的,尽管这可能无关紧要。您的静态方法不会让您引用$this,因此在非静态上下文中使用它不会走得太远。如果您不需要参考$this,那么无论哪种方式都没有关系,这就是您的代码所证明的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多