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(),它是静态的