Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php作用域解析运算符_Php_Oop - Fatal编程技术网

php作用域解析运算符

php作用域解析运算符,php,oop,Php,Oop,为什么会返回“严格标准”通知 我合法地调用一个静态方法,该方法包含对父类中非静态方法的调用。通知告诉您不应在静态方法中调用非静态方法 您可以检查方法(),如果在该方法中未出现“代码> $,则可以考虑将更改())/代码>为静态方法。 该通知告诉您不应该在静态方法中调用非静态方法。 您可以检查方法(),如果在该方法中没有出现“代码< $>代码>,您可以考虑将更改())/代码>静态方法。 您自己已经回答了这个问题——当您调用“代码>())/代码>静态(很好)时,()>代码>不是静态的。 作为非静态的i

为什么会返回“严格标准”通知


我合法地调用一个静态方法,该方法包含对父类中非静态方法的调用。

通知告诉您不应在静态方法中调用非静态方法


您可以检查方法<代码>()<代码>,如果在该方法中未出现“代码> $<代码>,则可以考虑将更改<代码>())/代码>为静态方法。

该通知告诉您不应该在静态方法中调用非静态方法。


您可以检查方法<代码>()<代码>,如果在该方法中没有出现“代码< $>代码>,您可以考虑将更改<代码>())/代码>静态方法。

您自己已经回答了这个问题——当您调用“代码>())/代码>静态(很好)时,<代码>()>代码>不是静态的。 作为非静态的
i()
假定您拥有对象的实例,因此可能试图访问属性或执行需要实例的其他操作。因此,它不应该静态调用,甚至不应该从子类的静态方法中调用。例如,考虑以下代码的微小变化:

class main
{
    var something = 0;
    public function __construct()
    {
        echo "in main class";
    }
    public function i()
    {
        $this->something++;
        echo "i in main";
    }
}

class secondary extends main
{
    public static function tom()
    {
        parent::i();
    }
}

secondary::tom();

这是一个严格的警告——意味着如果你愿意,你可以选择忽略它——但它告诉你,你所做的通常不是好的实践,你可能应该重新思考你的方法。

你自己已经回答了这个问题——当你静态地调用
tom()
时(这很好),
i()
不是静态的

class main
{
    public function __construct()
    {
        echo "in main class";
    }
    public static function i()
    {
        echo "i in main";
    }
}

class secondary extends main
{
    public static function tom()
    {
        parent::i();
    }
}

secondary::tom();
作为非静态的
i()
假定您拥有对象的实例,因此可能试图访问属性或执行需要实例的其他操作。因此,它不应该静态调用,甚至不应该从子类的静态方法中调用。例如,考虑以下代码的微小变化:

class main
{
    var something = 0;
    public function __construct()
    {
        echo "in main class";
    }
    public function i()
    {
        $this->something++;
        echo "i in main";
    }
}

class secondary extends main
{
    public static function tom()
    {
        parent::i();
    }
}

secondary::tom();
这是一个严格的警告——意味着你可以选择忽略它,如果你想的话——但它告诉你,你所做的通常不是好的实践,你可能应该重新考虑你的方法

class main
{
    public function __construct()
    {
        echo "in main class";
    }
    public static function i()
    {
        echo "i in main";
    }
}

class secondary extends main
{
    public static function tom()
    {
        parent::i();
    }
}

secondary::tom();
是它应该看起来的样子,注意我已经转换了函数
I()转换为静态,然后可以合法地由
parent::i()调用

但是表演:

 public static function tom()
    {
        $this->i();
    }
将返回:

致命错误:不在对象上下文中使用$this

所以你的赌注是完全静止的,或者不是静止的

决议:

class main
{
    public function __construct()
    {
        echo "in main class";
    }
    public function i()
    {
        echo "i in main";
    }
}

class secondary extends main
{
    public function tom()
    {
        $this->i();
    }
}

$Class = new secondary();
$Class->tom();
是它应该看起来的样子,注意我已经转换了函数
I()转换为静态,然后可以合法地由
parent::i()调用

但是表演:

 public static function tom()
    {
        $this->i();
    }
将返回:

致命错误:不在对象上下文中使用$this

所以你的赌注是完全静止的,或者不是静止的

决议:

class main
{
    public function __construct()
    {
        echo "in main class";
    }
    public function i()
    {
        echo "i in main";
    }
}

class secondary extends main
{
    public function tom()
    {
        $this->i();
    }
}

$Class = new secondary();
$Class->tom();
但是
i()
不是静态函数。我正在调用secondary::tom(),它是静态的,但是
i()
不是静态函数。我正在调用secondary::tom(),它是静态的