[英]PHP OOP , How to assign not static property to static method?
有人可以解釋如何在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();
?>
你不能直接。 您需要創建一個對象實例。 您可以制作一個並將其傳遞給靜態方法,也可以在靜態方法的主體中制作一個。
常規(非靜態)屬性需要給定類(類型)的對象實例。 靜態方法是通過引用類本身而不是對象來調用的。
但是,您可以將靜態屬性或常量用於靜態方法需求,而無需創建對象實例。
您必須實例化對象
<?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();
您可以通過以下方式靜態創建要調用該方法的類的實例:
$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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.