簡體   English   中英

PHP有沒有更好的緩存屬性的方法?

[英]Is there a better way to cache a property in PHP?

我有任意數量的類已經擴展了一個基類 class,我希望每個擴展類都有一個同名的 static function。 這個 function 通常非常昂貴,本質上應該只需要計算一次,因為它的結果總是相同的。 因此,如果尚未緩存,我想將其緩存為屬性。

我想要實現的棘手的事情是讓這個緩存延遲加載,即。 僅在調用 static function 時加載。 有可能只會使用這些類中的一個,我想避免緩存所有這些類,無論它們是否會被使用。

我目前所做的工作,但我想知道是否有更好的方法來做到這一點。

<?php

echo Inside1::something() . "\n";
echo Inside2::something();

class Outside {

}

class Inside1 extends Outside {

    private static $name;

    public static function something(){
        if(!self::$name){
            self::$name = "Inside 1";
        }
        return self::$name;
    }
}

class Inside2 extends Outside {

    private static $name;

    public static function something(){
        if(!self::$name){
            self::$name = "Inside 2";
        }
        return self::$name;
    }

}

對於這樣的事情,我通常會撥打 go。

class Class
{
    /**
     * @return BothMethodsHaveTheSameReturnType $value
     */
    public property getValue(bool $shouldGetCachedValue = true)
    {
        static $value = null;

        $isValueAlreadyCached = null !== $value

        if (!shouldGetCachedValue || !isValueAlreadyCached) {
            $value = $this->heavyCalculation();
        }

        return $value;
    }

    /**
     * @return BothMethodsHaveTheSameReturnType $value
     */
    private function heavyCalculation()
    {
        # You gotta do what you gotta do!

        return $value;
    }
}

注意:如果heavyCalculation返回null ,它將在下次調用時重新計算,而不管getValue中的$shouldGetCachedValue參數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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