1

我有大约 100 个字符串变量需要在 PHP 站点的每个网页上可用。数据在运行时永远不会改变,但将来我需要多组数据并在用于页面请求的一组数据之间切换。字符串的长度从 5 到 600 个字符不等。我目前包含一个具有如下数据的文件:

$someStuff = "abc";
$otherStuff = "def";
// etc

我正在使用 opcache。这种方法将从 opcache 中受益多少?

我看过这个答案。如果缓存的好处值得进行密钥查找,我可以改为使用关联数组。但是,我不清楚使用带有静态数组字段的类是否比声明变量更适合我的情况。

也许带有静态变量的函数是个好主意?这与静态类字段相同、更好还是更差?

function getItem ($name) {
    static $items = array("someStuff" => "abc");
    return $items[$name];
}

也许一个函数而不是每个字符串的变量?如果不是所有字符串都用于给定页面(通常是这种情况),这会更好吗?

function someStuff () { return "abc"; }
function otherStuff () { return "def"; }

什么是最好的解决方案?每个页面都需要数据,所以我希望尽可能高效,避免从磁盘/数据库等读取。

4

1 回答 1

2

在实践中,您是否执行以下操作没有区别:

$someStuff = "abc";
$otherStuff = "def";
// ...

或者

$constants = array(
    'someStuff' => "abc";
    'otherStuff' = >"def";
    // ...
);

或根据我的其他答案将其包装到类中的静态数组中。使用 OPcache 将消除编译开销和磁盘 I/O 开销。它将实习生字符串常量,因此这些常量对 Zend 引擎有效地静态可用。类版本对数组结构进行单个浅拷贝,另外两个版本将执行约 200 个操作码执行程序来初始化约 100 个变量,并且实际的实习字符串再次通过引用有效地复制。该引擎通常每秒解释 20-40M 的操作码执行程序,所以计算一下:没关系。

我的建议是:不要担心这里的运行时问题,只需选择您认为最清晰且最可维护的方法即可。就个人而言,我会使用一个从它自己的配置类文件中自动加载的类,但这是你的应用程序,做你最清楚的事情。

顺便说一句,使用函数很麻烦,而且它们确实有运行时成本,而且函数调用是最昂贵的 PHP 操作之一。对类常量的引用要便宜得多,但请尝试自己对这些进行基准测试。但是,同样,除非您指的是每个请求的这 10k + 次,否则您不会注意到实质性差异。太聪明只会让你“自取其辱”。:-)

于 2014-04-19T18:11:36.583 回答