首页 > 解决方案 > 在网站/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();

标签: phparrayswebconstants

解决方案


正如我在评论中所说,我真的更喜欢使用数据库。它更加灵活和面向未来。您可以有一个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 代码或翻译等信息。

无论如何,这取决于您,根据您在这种特定情况下的需要来选择最适合您的方法。


推荐阅读