php - 在网站/Web 应用程序中随处使用相同数组的正确方法
问题描述
我有一个网站,需要在多个页面中使用国家列表。在某些页面上,我需要显示列表,在某些页面上,我需要从该列表中填充下拉列表。为此,我知道以下方法。哪一个更好,为什么或者还有其他更好的选择。我在某处读到,使用 static 关键字会减慢代码的速度,并且每次创建 Object 也会减慢代码的速度,因为它每次都分配和消耗内存。所以请说明什么是最好的出路。
方法一:
class Country
{
public static $CountryList = array('Country 1', 'Country 2', .....);
}
In my pages I will use it with :
$Countries = Country :: $CountryList;
方法 B:
class Country
{
public $CountryList = array('Country 1', 'Country 2', .....);
}
In my pages I will use it with :
$Obj = new Country();
$CountryList = $Obj->CountryList;
方法 C:
class Country
{
private $CountryList = array('Country 1', 'Country 2', .....);
public static function getList()
{
return $this->CountryList;
}
}
In my pages I will use it with :
$Obj = new Country();
$CountryList = $Obj->getList();
解决方案
正如我在评论中所说,我真的更喜欢使用数据库。它更加灵活和面向未来。您可以有一个country
包含 ID、ISO 代码和任何您想要的内容的表country_lang
,另一个包含国家名称翻译的表。这样做,您的代码将保持相同并且工作相同,无需进行更新。
但是,如果您真的想在没有数据库的情况下将国家/地区保留在变量中,则可以根据需要使用多种解决方案。
1 - 普通的旧常数
如果您使用的是PHP 7.0+,则可以使用普通的旧常量。
<?php
define('COUNTRIES', ['a', 'b']);
var_dump(COUNTRIES);
优点:
- 如果在前端控制器或任何全局文件中定义,该常量在应用程序的任何地方都可用。
- 因为它是一个常量,所以在执行过程中您可以确定它的完整性,所以没有方法可以更新它的值。
缺点:
- 它不是面向未来的,如果有一天您想添加有关它的信息(例如翻译或 ISO 代码),那将非常困难。
- 如果您在某些函数/方法中使用此值,则这些函数/方法不够灵活,无法在许多上下文中使用。
2 - 类常量
如果您使用的是PHP 5.6+,则可以使用类常量。
<?php
class Country
{
const COUNTRIES = ['a', 'b'];
}
优点:
- 它被封装在一个类中,因此更容易在任何方法中添加它。您可以添加一些将其作为参数的方法。
缺点:
- 它不是面向未来的,如果你想添加一些信息,比如 ISO 代码或翻译,这很难。
3 - 静态属性
您可以使用静态属性。
<?php
class Country
{
public static $countries = ['a', 'b'];
}
优点:
- 它被封装在类中。
缺点:
- 这是一个公共属性,因此任何函数/方法都可以更新该值。
- 它不是面向未来的,很难添加 ISO 代码或翻译等信息。
无论如何,这取决于您,根据您在这种特定情况下的需要来选择最适合您的方法。
推荐阅读
- google-apps-script - 使用 googlescript 显示多个工作表
- simbad - SIMBAD 多星查询产生异常结果
- wso2 - Wso2 apim 自定义指标
- flutter - 有没有办法检测 DropDownButton 何时关闭?
- postgresql - 如何根据外部表中的日期对表进行分区以保持数据一致性?
- python - 使用 `statsmodels.api.qqplot()` 创建多个子图的最有效方法是什么?
- grails - 如何在错误时不丢失 grails 中的文件上传名称
- selenium - 是否可以从检查元素调试器中的 eval 代码部分抓取数据?
- r - Error in .subset2(x, i, exact = exact) : recursive indexing failed at level 2
- scala - Scala:为什么这个函数中存在类型不匹配?