什么是使用单管“|” 在函数参数做什么?(What Does Using A Single Pi

2019-06-21 22:07发布

就拿下面的代码:

phpinfo(INFO_MODULES | INFO_ENVIRONMENT | INFO_VARIABLES);

一个单一的参数被使用,但我提供的由一个管道符号分隔的选项列表。

  • 究竟是什么在函数的参数值发生?
  • 我可以使用同样的事情在我自己的职能?
  • 如此如何,以及是否有利于本在说传递一个数组呢?

Answer 1:

位运算符

按位运算符修改所涉及的值的位。 按位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.


Answer 2:

你传递的参数,它是按位或多个标志 。 您可以使用运营商的任何地方你喜欢。



文章来源: What Does Using A Single Pipe '|' In A Function Argument Do?