簡體   English   中英

PHP OOP,如何將非靜態屬性分配給靜態方法?

[英]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();

例如,以這些類FirstSecond為例。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM