有人可以解释如何在php中使用静态方法中的静态属性,这是错误的代码,但我想知道如何解决这个问题,谢谢
<?php
class SomeClass
{
public $_someMember;
public function __construct()
{
$this->_someMember = 1;
}
public static function getSomethingStatic()
{
return $this->_someMember * 5; // here's the catch
}
}
echo SomeClass::getSomethingStatic();
?>
答案 0 :(得分:4)
你不能直接。您需要创建一个对象实例。您可以创建一个并将其传递给静态方法,或者在静态方法的主体中创建一个。
常规(非静态)属性需要给定类(类型)的对象实例。 通过引用类本身来调用静态方法,而不是对象。
但是,您可以使用静态属性或常量来满足静态方法的需要,而无需创建对象实例。
答案 1 :(得分:0)
您必须实例化对象
<?php
class SomeClass
{
public $_someMember;
public function __construct()
{
$this->_someMember = 1;
}
public static function getSomethingStatic()
{
$object = new self();
return $object->_someMember * 5; // here's the catch
}
}
echo SomeClass::getSomethingStatic();
答案 2 :(得分:0)
您可以静态创建通过以下方法调用该方法的类的实例:
$instance = new static();
您还可以通过以下方式静态创建实际定义方法的类的实例:
$instance = new self();
例如,请参加这些课程First
和Second
。
class First
{
public static function getStatic()
{
return new static();
}
public static function getSelf()
{
return new self();
}
}
class Second extends First{ }
Second::getStatic()
时,我们会获得Second
。Second::getSelf()
时,我们会获得First
。First
调用任一方法时,我们会获得First
的实例。这意味着您可以将方法更改为:
public static function getSomethingStatic()
{
$instance = new static(); // or new self() if you always want to use 'SomeClass'
// and never an extending class.
return $instance->_someMember;
}