Правильный способ использовать один и тот же массив везде в веб-сайте / веб-приложении - PullRequest
0 голосов
/ 24 мая 2018

У меня есть веб-сайт, и мне нужно использовать список стран на нескольких страницах.На некоторых страницах мне нужно отобразить список, а на некоторых страницах мне нужно заполнить выпадающий список из этого списка.Для этого мне известны следующие методы.Какой из них лучше и почему, или есть какой-либо другой предпочтительный вариант.Я где-то читал, что использование статического ключевого слова замедляет код, а создание объекта каждый раз также замедляет код, поскольку он каждый раз выделяет и потребляет память.Поэтому, пожалуйста, осветите лучший выход.

Метод 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 голосов
/ 24 мая 2018

Как я сказал в комментариях, я действительно предпочел бы использовать базу данных.Это более гибкий и перспективный .Вы можете иметь таблицу country, которая содержит идентификатор, код ISO и все, что вы хотите, другую таблицу country_lang, которая содержит переводы названий стран.При этом ваш код остается прежним и работает одинаково, обновление не требуется.

Но если вы действительно хотите сохранить страны в переменной без базы данных, вы можете использовать множество решений в соответствии сваша потребность.

1 - Обычная старая константа

Если вы используете PHP 7.0 + , вы можете использовать простую старую константу.

<?php
define('COUNTRIES', ['a', 'b']);
var_dump(COUNTRIES);

Плюсы :

  • Если определено во фронт-контроллере или любом глобальном файле, константа доступна везде в приложении.
  • Поскольку вы являетесь константой, выНе будучи уверенным в его целостности во время выполнения, ни один метод не может обновить его значение.

Минусы :

  • Это не , ориентированное на будущее, если однажды вы захотите добавить информацию об этом (например, переводы или коды ISO), это будет довольно сложно.
  • Если вы используете это значение в некоторых функциях / методах, эти функции / методы недостаточно гибкидля использования во многих контекстах.

2 - класс constant

Если вы используете PHP 5.6 + , вы можете использовать константу класса.

<?php
class Country
{
    const COUNTRIES = ['a', 'b'];
}

Pros :

  • Он инкапсулирован в классе, поэтому его проще добавить в любой метод.Вы можете добавить несколько методов, которые принимают его в качестве параметра.

Минусы :

  • Это не в будущем , еслиВы хотите добавить некоторую информацию, такую ​​как коды ISO или переводы, это сложно.

3 - Статический атрибут

Вы можете использовать статический атрибут.

<?php
class Country
{
    public static $countries = ['a', 'b'];
}

Плюсы :

  • Инкапсулированы в классе.

Минусы :

  • Этооткрытый атрибут, поэтому любая функция / метод может обновлять значение.
  • Это не на будущее , сложно добавить информацию, такую ​​как коды ISO или переводы.

В любом случае, вам решать, в зависимости от вашей потребности в данном конкретном случае выбрать, какой метод лучше для вас.

...