就拿下面的代码:
phpinfo(INFO_MODULES | INFO_ENVIRONMENT | INFO_VARIABLES);
一个单一的参数被使用,但我提供的由一个管道符号分隔的选项列表。
- 究竟是什么在函数的参数值发生?
- 我可以使用同样的事情在我自己的职能?
- 如此如何,以及是否有利于本在说传递一个数组呢?
就拿下面的代码:
phpinfo(INFO_MODULES | INFO_ENVIRONMENT | INFO_VARIABLES);
一个单一的参数被使用,但我提供的由一个管道符号分隔的选项列表。
按位运算符修改所涉及的值的位。 按位OR
基本OR放在一起左,右两个参数的每一位。 例如:
5 | 2
将转化为比特/二进制为:
101 | 10
这将导致:
111
因为:
1 || 0 = 1
0 || 1 = 1
1 || 0 = 1
而作为一个整数的7,表示正是你会得到什么,如果你:
echo 5 | 2;
作为伊格纳西奥指出,这是最常见的PHP(和其他汉语语言)作为一种方式来多个标志结合起来。 每个标志通常被定义为一个常数,其值通常被设定为一个整数,它表示只有一个比特在不同的偏移量:
define('FLAG_A', 1); /// 0001
define('FLAG_B', 2); /// 0010
define('FLAG_C', 4); /// 0100
define('FLAG_D', 8); /// 1000
然后,当你OR
这些结合在一起,他们各自经营自己的位偏移,绝不会发生冲突:
FLAG_A | FLAG_C
翻译为:
1 | 100
所以,你最终打开:
101
这代表整数5。
然后所有的代码必须做-的将被反应到不同的标志是代码设置为以下(使用按位AND
):
$combined_flags = FLAG_A | FLAG_C;
if ( $combined_flags & FLAG_A ) {
/// do something when FLAG_A is set
}
if ( $combined_flags & FLAG_B ) {
/// this wont be reached with the current value of $combined_flags
}
if ( $combined_flags & FLAG_C ) {
/// do something when FLAG_C is set
}
在一天结束的时候它只是使事情更容易通过其命名常量阅读,一般更优化依靠整数值,而不是字符串或数组。 使用常量的另一个好处是,如果他们使用时是不断拼写错误,编译器是一个更好的局面告诉,并抛出一个警告......如果使用的字符串值,它不可能知道什么是错误的方式。
define('MY_FLAG_WITH_EASY_TYPO', 1);
my_function_that_expects_a_flag( MY_FLAG_WITH_EASY_TPYO );
/// if you have strict errors on the above will trigger an error
my_function_that_expects_a_flag( 'my_string_with_easy_tpyo' );
/// the above is just a string, the compiler knows nowt with
/// regard to it's correctness, so instead you'd have to
/// code your own checks.
你传递的参数,它是按位或多个标志 。 您可以使用运营商的任何地方你喜欢。