PHP: 在实例的静态 class 中调用实例的私有方法
PHP: calling on an instance's private method inside an instance's static class
我想做的是:
class A {
public function __construct($a) {
// stuff here
}
public static function request() {
$instance = new self("hi");
$instance->bye(); // this weirdly only sometimes throws errors
}
private function bye() {
// stuff here
}
}
A::request();
感兴趣的是 $instance->bye()
- 这在某种程度上允许在静态上下文中使用,但是当在实例上调用时并且在与构造函数相同的 class 中调用时?或者这不是一般的好做法?奇怪的是,这有时只会抛出调用没有上下文的私有方法的错误。
感谢任何帮助!
永远不要从静态方法调用常规方法。
因为可能根本就没有实例(例如:直接调用A::request()
),会报错。
静态方法对于 class 的所有实例都是相同的,因此它将无法访问 non-static 属性。
可以但不应该做的是从静态方法调用相同类型对象的私有方法:
<?php
class A {
private function foo()
{
print("bar");
}
static public function bar($a)
{
$a->foo();
}
}
$a = new A();
A::bar($a);
?>
事实证明这很好,PHPStorm 调试器制造了问题并搞砸了上下文,因此为什么错误只是有时发生,而这显然发生在我们的系统上¯_(ツ)_/¯
我想做的是:
class A {
public function __construct($a) {
// stuff here
}
public static function request() {
$instance = new self("hi");
$instance->bye(); // this weirdly only sometimes throws errors
}
private function bye() {
// stuff here
}
}
A::request();
感兴趣的是 $instance->bye()
- 这在某种程度上允许在静态上下文中使用,但是当在实例上调用时并且在与构造函数相同的 class 中调用时?或者这不是一般的好做法?奇怪的是,这有时只会抛出调用没有上下文的私有方法的错误。
感谢任何帮助!
永远不要从静态方法调用常规方法。
因为可能根本就没有实例(例如:直接调用A::request()
),会报错。
静态方法对于 class 的所有实例都是相同的,因此它将无法访问 non-static 属性。
可以但不应该做的是从静态方法调用相同类型对象的私有方法:
<?php
class A {
private function foo()
{
print("bar");
}
static public function bar($a)
{
$a->foo();
}
}
$a = new A();
A::bar($a);
?>
事实证明这很好,PHPStorm 调试器制造了问题并搞砸了上下文,因此为什么错误只是有时发生,而这显然发生在我们的系统上¯_(ツ)_/¯