/
logical.xml
112 lines (101 loc) · 3.24 KB
/
logical.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 43d07782b514d0c7a8487f2c74063739f302df8d Maintainer: mumumu Status: ready -->
<sect1 xml:id="language.operators.logical">
<title>論理演算子</title>
<titleabbrev>論理演算子</titleabbrev>
<table>
<title>論理演算子</title>
<tgroup cols="3">
<thead>
<row>
<entry>例</entry>
<entry>名前</entry>
<entry>結果</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a and $b</entry>
<entry>論理積</entry>
<entry><varname>$a</varname> および <varname>$b</varname> が共に &true; の場合に &true;</entry>
</row>
<row>
<entry>$a or $b</entry>
<entry>論理和</entry>
<entry><varname>$a</varname> または <varname>$b</varname> のどちらかが &true; の場合に &true;</entry>
</row>
<row>
<entry>$a xor $b</entry>
<entry>排他的論理和</entry>
<entry>
<varname>$a</varname> または <varname>$b</varname> のどちらかが &true; でかつ両方とも &true; でない場合に &true;
</entry>
</row>
<row>
<entry>! $a</entry>
<entry>否定</entry>
<entry><varname>$a</varname> が &true; でない場合 &true;</entry>
</row>
<row>
<entry>$a && $b</entry>
<entry>論理積</entry>
<entry><varname>$a</varname> および <varname>$b</varname> が共に &true; の場合に &true;</entry>
</row>
<row>
<entry>$a || $b</entry>
<entry>論理和</entry>
<entry><varname>$a</varname> または <varname>$b</varname> のどちらかが &true; の場合に &true;</entry>
</row>
</tbody>
</tgroup>
</table>
<simpara>
"and" および "or" 演算子が 2 種類あるのは、演算が行われる際の優先順位が
異なっているためです
(<link linkend="language.operators.precedence">演算子の優先順位</link>
を参照ください)。
</simpara>
<example>
<title>論理演算子についての説明</title>
<programlisting role="php">
<![CDATA[
<?php
// --------------------
// foo() は決してコールされることはありません。これらの演算子は短絡評価を行うからです。
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
// --------------------
// "||" の優先順位は "or" より高くなります
// $e に代入されるのは、(false || true) の評価結果です
// これは、次の式と同様です: ($e = (false || true))
$e = false || true;
// $f に false を代入してから "or" 演算子を評価します
// これは、次の式と同様です: (($f = false) or true)
$f = false or true;
var_dump($e, $f);
// --------------------
// "&&" の優先順位は "and" より高くなります
// $g に代入されるのは、(true && false) の評価結果です
// これは、次の式と同様です: ($g = (true && false))
$g = true && false;
// $h に true を代入してから "and" 演算子を評価します
// これは、次の式と同様です: (($h = true) and false)
$h = true and false;
var_dump($g, $h);
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
bool(true)
bool(false)
bool(false)
bool(true)
]]>
</screen>
</example>
</sect1>