在网站/ Web应用程序中到处使用相同数组的正确方法

时间:2018-05-24 10:38:20

标签: php arrays web constants

我有一个网站&需要在多个页面中使用国家/地区列表。在某些页面上,我需要显示列表&在某些页面上,我需要填充该列表中的下拉列表。为此我知道以下方法。哪一个更好&为什么还是有其他更好的选择。我在某处读到,使用静态关键字会减慢代码速度并且每次创建对象也会减慢代码的速度,因为它每次都会分配和消耗内存。所以请详细说明什么是最好的出路。

方法A:

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();

1 个答案:

答案 0 :(得分:1)

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

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