什么使用单pipe'|' 在函数参数中呢?

以下面的代码为例:

phpinfo(INFO_MODULES | INFO_ENVIRONMENT | INFO_VARIABLES); 

正在使用单个参数,但是我提供了由单个pipe道符号分隔的选项列表。

  • 这个函数中的参数值究竟发生了什么?
  • 我可以在自己的function中使用相同的东西吗?
  • 那么如何传递一个数组,而不是有利于这个呢?

先谢谢你。

按位运算符

按位运算符修改相关值的位。 按位“ OR基本上将“左”和“右”参数的每一位进行“ OR ”运算。 例如:

 5 | 2 

将转换为位/二进制为:

 101 | 10 

这将导致:

 111 

因为:

 1 || 0 = 1 0 || 1 = 1 1 || 0 = 1 

而作为一个整数是7的表示,这正是你所得到的,如果你:

 echo 5 | 2; 

用Eddie Izzard的话来说…… Flag!

正如Ignacio所说,这是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 } 

在一天结束的时候,通过命名常量可以使事情更容易阅读,而通常依靠整数值而不是string或数组来更好。 使用常量的另一个好处是,如果它们在使用时错误input,编译器将会处于更好的状态,告诉并发出警告……如果使用string值,则无法知道任何错误。

 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. 

你传递的是一个参数,它是多个标志的按位或。 您可以在任何地方使用操作员。