在类中存储全局常量的性能

时间:2011-05-21 14:47:57

标签: php performance class

我最近开始在我的项目中使用类,其中一个用途是在private数组中设置和存储全局常量。我想知道这是不是常见的做法,不好,而且最重要的是,如果我在课堂上对fetch函数进行大量调用时很慢(很多时候我需要网站名称,电子邮件地址或MySQL详细信息) )。

我没有发布代码,因为它非常基本;只是一个函数,returns数组中项目的值与给定的键。

2 个答案:

答案 0 :(得分:2)

不要担心。
通过这种方式,您将来到Singleton和Registry模式。不要使用这些图案,它是反模式。

尝试通过SOLID principles构建设计,您的对象将越来越少地耦合。站点名称将存储在类中,该类将输出内容到页面,其他类将不需要此常量。电子邮件地址将仅存储在Mailer类中(或其配置文件中),其他类不需要此常量。等等。

Class,它包含所有常量和所有配置,它都是'God object',它也是一种反模式(不良实践)。

不要担心getter和setter的性能。

答案 1 :(得分:0)

除非你在那个数组中声明了数百个元素,否则应该没问题,看起来非常适合获取和设置:)

我在这里注意到的是,为什么不直接声明实例变量,而不是将所有信息存储在私有数组中?例如,而不是

<?php
class Test() {
    private info = array('sitename' => 'Site Name'; 'database' => 'Database Name');
}
?>

这样做应该是更好的做法

<?php
class Test() {
    private sitename = 'Site Name';
    private database = 'Database Name';
}

?>

这背后的原因是,当你需要获得网站的单一信息时,你不需要获得整个数组,只需获得它的一个元素,看起来不是很好。使用实例变量更方便获取和设置。

<?php
$test = new Test();
echo $test->info['sitename'];
$test->info['database'] = 'testDB';
?>

使用下面的代码看起来更好,更方便吗?

<?php
$test = new Test();
echo $test->sitename;
$test->database = 'testDB';
?>