# 逻辑运算符

逻辑与运算符有两种不同的形式，逻辑与运算符 `&&` 优先级高于赋值运算符，逻辑与运算符 `and` 优先级低于赋值运算符。逻辑与运算符在两个值都为 `true` 时返回 `true` 。

```php
<?php

var_dump(false && foo());  // bool(false)
var_dump(false and foo()); // bool(false)

$foo = true && false;
var_dump($foo);            // bool(false)

$foo = true and false;
var_dump($foo);            // bool(true)

```

逻辑或运算符有两种不同的形式，逻辑或运算符 `||` 优先级高于赋值运算符，逻辑或运算符 `or` 优先级低于赋值运算符。逻辑或运算符在两个值任何一个为 `true` 时返回 `true` 。

```php
<?php

var_dump(true || foo()); // bool(true)
var_dump(true or foo()); // bool(true)

$foo = false || true;
var_dump($foo);          // bool(true)

$foo = false or true;
var_dump($foo);          // bool(false)

```

逻辑异或运算符 `xor` 优先级低于赋值运算符。逻辑异或运算符 `xor` 当一个值为 `true` 另一个值为 `false` 时返回 `true` 。

```php
<?php

var_dump(false xor true); // bool(true)

$foo = 'foo';
$bar = '0';
var_dump($foo xor $bar);  // bool(true)

$foo = false xor true;
var_dump($foo);           // bool(false)

```

逻辑非运算符 `!` 当一个值为 `true` 时返回 `false` ， 当一个值为 `false` 时返回 `true` 。

```php
<?php

$foo = 'foo';
var_dump(!$foo); // bool(false)

$bar = '0';
var_dump(!$bar); // bool(true)

```

