PHP константы, содержащие массивы?

Вы можете использовать метод nos, описанный в этом потоке, или (более обычный) способ, передавая его между связанными процессами (обычно родительскими или дочерними), создавая их, разветвленные процессы автоматически получают копию.

Действительно, forked-процессы получают все ваши FD и могут использовать их, если они не закрывают их (что обычно является хорошей идеей).

Поэтому, если родительский forks два ребенка, если они оба имеют файловый дескриптор, который они не закрывали, теперь он разделен (даже если родитель впоследствии закрывает его). Это может быть, например, труба от одного ребенка к другому. Это как перенаправление оболочки подобно

ls -l | more

Работа.

379
задан meagar 13 August 2012 в 16:25
поделиться

6 ответов

ПРИМЕЧАНИЕ: хотя это принятый ответ, стоит отметить, что в PHP 5.6+ вы можете иметь константные массивы - см. Ответ Андреа Фолдс ниже .

Вы также можно сериализовать ваш массив и затем поместить его в константу:

# define constant, serialize array
define ("FRUITS", serialize (array ("apple", "cherry", "banana")));

# use it
$my_fruits = unserialize (FRUITS);
487
ответ дан 22 November 2019 в 23:51
поделиться

если Вы используете PHP 7 & 7 +, можно использовать выборку как это также

define('TEAM', ['guy', 'development team']);
echo TEAM[0]; 
// output from system will be "guy"
0
ответ дан Mac Rathod 4 November 2019 в 09:31
поделиться

Это верно, вы не можете использовать массивы для константы, только масштабатор и ноль. Идея использования массива для констант мне кажется несколько отсталой.

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

-2
ответ дан 22 November 2019 в 23:51
поделиться

Я согласен с eyze, константы имеют тенденцию быть однозначные значения, необходимые на протяжении всего жизненного цикла вашего приложения. Вы можете подумать об использовании файла конфигурации вместо констант для такого рода вещей.

Если вам действительно нужны константные массивы, вы можете использовать соглашения об именах для имитации массивов: например, DB_Name, DB_USER, DB_HOST и т. Д.

-1
ответ дан 22 November 2019 в 23:51
поделиться

Константы могут содержать только скалярные значения, я предлагаю вам сохранить сериализацию (или представление в кодировке JSON) массива.

0
ответ дан 22 November 2019 в 23:51
поделиться

Вы можете хранить их как статические переменные класса:

class Constants {
    public static $array = array('guy', 'development team');
}
# Warning: array can be changed lateron, so this is not a real constant value:
Constants::$array[] = 'newValue';

Если вам не нравится идея, что массив может быть изменен другими, может помочь геттер:

class Constants {
    private static $array = array('guy', 'development team');
    public static function getArray() {
        return self::$array;
    }
}
$constantArray = Constants::getArray();

EDIT

Начиная с PHP5.4, можно даже получить доступ к значениям массива без необходимости в промежуточных переменных, то есть работает следующее:

$x = Constants::getArray()['index'];
141
ответ дан 22 November 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: