Что такое флаги PHP в аргументах функции? - PullRequest
8 голосов
/ 09 марта 2012

Я заметил, что некоторые функции в PHP используют flags в качестве аргументов.Что делает их уникальными вместо простых строковых аргументов?Я спрашиваю, потому что хочу использовать их в своих собственных пользовательских функциях, но мне любопытно узнать, каков процесс для этого.создать пользовательскую функцию с флагами и когда это не ?

Ответы [ 2 ]

10 голосов
/ 09 марта 2012

Это просто константы, которые отображаются на число, например, SORT_NUMERIC (константа, используемая функциями сортировки) - это целое число 1.

Посмотрите примеры для json_encode().

Как видите, каждый флаг равен 2 n .Таким образом, | может использоваться для указания нескольких флагов .

Например, предположим, что вы хотите использовать флаг JSON_FORCE_OBJECT (16 или 00010000) и JSON_PRETTY_PRINT (128 или 10000000).

Битовый оператор ИЛИ (|) включит бит, если бит одного из операндов включен ...

JSON_FORCE_OBJECT | JSON_PRETTY_PRINT

... внутренне ....

00010000 | 1000000

... то есть ...

10010000

Вы можете проверить это с помощью ...

var_dump(base_convert(JSON_PRETTY_PRINT | JSON_FORCE_OBJECT, 10, 2));
// string(8) "10010000"

CodePad .

Таким образом, оба флага могут быть установлены с побитовыми операторами.

3 голосов
/ 09 марта 2012

Обычно флаги представляют собой целые числа, которые являются последовательными степенями 2, так что каждый из них имеет один бит, установленный в 1, а все остальные в 0. Таким образом, вы можете передать много двоичных значений в одном целом числе, используя побитовые операторы.См. Это для получения дополнительной (и, возможно, более точной) информации .

...