代码之家  ›  专栏  ›  技术社区  ›  sqlchild

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

  •  -2
  • sqlchild  · 技术社区  · 6 年前

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

    方法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 回复  |  直到 6 年前
        1
  •  1
  •   Anthony    6 年前

    正如我在评论中所说,我真的更喜欢使用数据库。它更灵活,而且 未来证明 . 你可以要张桌子 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代码或翻译之类的信息。

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