[英]Is there a better way to change a DOMElement->tagName property in 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.