【问题标题】:How to invoke a method statically?如何静态调用方法?
【发布时间】:2011-05-07 08:44:51
【问题描述】:
<?php
class Popular
{
    public static function getVideo()
    {
        return $this->parsing();
    }
}

class Video 
    extends Popular
{
    public static function parsing()
    {
        return 'trololo';
    }

    public static function block()
    {
        return parent::getVideo();
    }
}

echo Video::block();

我绝对应该这样称呼课程:

Video::block();

而不是初始化它

$video = new Video();
echo $video->block()

不是这个!

Video::block(); // Only this way <<

但是: 致命错误:在第 6 行的 myFile.php 中不在对象上下文中时使用 $this

如何从“流行”类中调用“解析”函数?

糟糕的英语太棒了

【问题讨论】:

标签: php oop methods method-chaining


【解决方案1】:

由于您使用的是静态方法,因此您不能使用 $thiskeyword,因为它只能在对象中使用,而不是在类中。

当您使用new 关键字时,您从一个类中创建和对象,如果您没有使用新关键字,那么$this 将不可用,因为它不是对象

为了使您的代码正常工作,如果是静态的,您必须使用 static 关键字和 Scope Resolution Operator (::),因为您的方法在父类中并且它不受限制,请使用 static 关键字来调用父类静态方法。

例子:

class Popular
{
    public static function getVideo()
    {
        return static::parsing(); //Here
    }
}

【讨论】:

    【解决方案2】:

    return $this-&gt;parsing(); 更改为return self::parsing();

    【讨论】:

    • self::parsing() 将尝试调用不存在的Popular::parsing()。如果使用 PHP 5.3.0(或更高版本),您应该使用后期静态绑定,即static::parsing()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多