gpt4 book ai didi

php - 在静态类中存储数据 [PHP]

转载 作者:可可西里 更新时间:2023-11-01 13:25:56 24 4
gpt4 key购买 nike

大家好,圣诞快乐!

我在效率方面遇到了一些麻烦,我希望 StackOverflow 社区可以帮助我。

在我的一个(静态)类中,我有一个函数可以从我的数据库中获取大量信息,解析该信息并将其放入格式化数组中。此类中的许多函数都依赖于该格式化数组,并且在整个类中,我多次调用它,这意味着应用程序在一次运行中多次经历这个过程,我认为这不是很有效。所以我想知道是否有更有效的方法可以做到这一点。有没有一种方法可以将格式化数组存储在静态函数中,这样我就不必在每次需要来自格式化数组的信息时都重新执行整个过程?

private static function makeArray(){ 
// grab information from database and format array here
return $array;
}

public static function doSomething(){
$data = self::makeArray();
return $data->stuff;
}

public static function doSomethingElse(){
$data = self::makeArray();
return $data->stuff->moreStuff;
}

最佳答案

如果 makeArray() 的结果预计在一次脚本运行期间不会改变,请考虑在第一次检索结果后将其结果缓存在静态类属性中。为此,请检查变量是否为空。如果是,则执行数据库操作并保存结果。如果非空,则只返回现有数组。

// A static property to hold the array
private static $array;

private static function makeArray() {
// Only if still empty, populate the array
if (empty(self::$array)) {
// grab information from database and format array here
self::$array = array(...);
}
// Return it - maybe newly populated, maybe cached
return self::$array;
}

您甚至可以向函数添加一个 bool 参数,以强制生成数组的新副本。

// Add a boolean param (default false) to force fresh data
private static function makeArray($fresh = false) {
// If still empty OR the $fresh param is true, get new data
if (empty(self::$array) || $fresh) {
// grab information from database and format array here
self::$array = array(...);
}
// Return it - maybe newly populated, maybe cached
return self::$array;
}

您的所有其他类方法可能会像您已经完成的那样继续调用 self::makeArray()

public static function doSomething(){
$data = self::makeArray();
return $data->stuff;
}

如果您添加了可选的 fresh 参数并想强制从数据库中检索

public static function doSomething(){
// Call normally (accepting cached values if present)
$data = self::makeArray();
return $data->stuff;
}
public static function doSomethingRequiringRefresh(){
// Call with the $fresh param true
$data = self::makeArray(true);
return $data->stuff;
}

关于php - 在静态类中存储数据 [PHP],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34467887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com