Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在类中存储全局常量的性能_Php_Performance_Class - Fatal编程技术网

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

Php 在类中存储全局常量的性能,php,performance,class,Php,Performance,Class,我最近开始在我的项目中使用类,其中一个用途是在private数组中设置和存储全局常量。我想知道这是否是一种常见的做法,如果我在类中大量调用fetch函数,那么这种做法很糟糕,而且最重要的是,如果我需要站点名称、电子邮件地址或MySQL详细信息,那么调用速度会很慢 我不会发布代码,因为它非常基本;只需一个函数,返回数组中具有给定键的项的值。不用担心。 走这条路,您将看到模式Singleton和Registry。不要使用这些模式,这是反模式 试着按顺序构建设计,对象之间的耦合会越来越少。站点名称将存

我最近开始在我的项目中使用类,其中一个用途是在
private
数组中设置和存储全局常量。我想知道这是否是一种常见的做法,如果我在类中大量调用fetch函数,那么这种做法很糟糕,而且最重要的是,如果我需要站点名称、电子邮件地址或MySQL详细信息,那么调用速度会很慢


我不会发布代码,因为它非常基本;只需一个函数,
返回数组中具有给定键的项的值。

不用担心。
走这条路,您将看到模式Singleton和Registry。不要使用这些模式,这是反模式

试着按顺序构建设计,对象之间的耦合会越来越少。站点名称将存储在类中,该类将向页面输出内容,其他类不需要此常量。电子邮件地址将仅存储在Mailer类(或其配置文件)中,其他类不需要此常量。等等

类,它包含所有常量和所有配置。它有点像“”,而且也是一种反模式(糟糕的做法)


不要担心getter和setter的性能。

除非您在该数组中声明了数百个元素,否则应该没有问题,因为获取和设置这些元素看起来非常好:)

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

<?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';
?>


我不明白你在做什么。您是在查找数组值,还是在进行数据库调用?或者两者都有?为什么要将常量存储在数组中?我会使用类变量。您是否会问,将某个对象作为常量是否比将其存储在类中并调用访问器方法来获取其值更好?我想这取决于数据。如果它更适合设计成为一个类的一部分。性能我不认为有什么区别。优化您的数据库查询,不要担心变量访问和常量访问的性能。让可读性成为决定因素。过早的优化是万恶之源。
test->database='testDB'上帝对象
:在getter和setter中使用此方法(返回帖子)的问题是,因为变量是硬编码的,getter和setter也必须是bar
eval()
,这很愚蠢。这就是为什么我需要一个数组,虽然它不是很整齐。非常感谢OZ!。也谢谢你的链接:-)