Відмінності між версіями «Оператори порівняння PHP»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
 
(не показано 3 проміжні версії ще одного учасника)
Рядок 4: Рядок 4:
 
<p>В PHP разрешается сравнивать только скалярные переменные. Массивы и объекты в PHP сравнивать нельзя. Их даже нельзя сравнивать на равенство (при помощи оператора ==), но при выполнении такой операции PHP не выдает предупреждения. Так что удивившись как-то раз, почему два совершенно разных массива при сравнении их с помощью <strong>==</strong> оказываются вдруг одинаковыми, вспомните, что перед сравнением оба операнда преобразуются в слово <a<strong>array</strong></a>, которое потом и сравнивается.</p>
 
<p>В PHP разрешается сравнивать только скалярные переменные. Массивы и объекты в PHP сравнивать нельзя. Их даже нельзя сравнивать на равенство (при помощи оператора ==), но при выполнении такой операции PHP не выдает предупреждения. Так что удивившись как-то раз, почему два совершенно разных массива при сравнении их с помощью <strong>==</strong> оказываются вдруг одинаковыми, вспомните, что перед сравнением оба операнда преобразуются в слово <a<strong>array</strong></a>, которое потом и сравнивается.</p>
 
<p>Также вам возможно будет интересно ознакомиться с разделом <A href="/learnphp/datatypes/?compare_tables" target="_blank">сравнение типов</A>, в котором приведено большое количество соответствующих примеров.</p>
 
<p>Также вам возможно будет интересно ознакомиться с разделом <A href="/learnphp/datatypes/?compare_tables" target="_blank">сравнение типов</A>, в котором приведено большое количество соответствующих примеров.</p>
<p>Операторы сравнения:</p>
+
<p>'''Оператори порівняння''':</p>
 +
 
 +
<TABLE border=1 cellpadding="3" cellspacing="1" bgcolor="#000066">
  
<TABLE border=0 cellpadding="3" cellspacing="1" bgcolor="#000066">
 
 
 
 
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
       <TH width="76">Пример</TH>
 
       <TH width="76">Пример</TH>
Рядок 14: Рядок 13:
 
       <TH width="516">Результат</TH>
 
       <TH width="516">Результат</TH>
 
     </TR>
 
     </TR>
 
 
 
 
    
 
    
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
     <TR bgcolor="#FFFFFF" class="mtx4">
Рядок 21: Рядок 18:
 
       <TD>Равно</TD>
 
       <TD>Равно</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a равно $b.</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a равно $b.</TD>
 
 
     </TR>
 
     </TR>
 +
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
       <TD>$a === $b</TD>
 
       <TD>$a === $b</TD>
Рядок 34: Рядок 31:
 
       <TD><TT><B>TRUE</B></TT> если $a не равно $b.</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a не равно $b.</TD>
 
     </TR>
 
     </TR>
    <TR bgcolor="#FFFFFF" class="mtx4">
 
  
 +
    <TR bgcolor="#FFFFFF" class="mtx4">
 
       <TD>$a &lt;&gt; $b</TD>
 
       <TD>$a &lt;&gt; $b</TD>
 
       <TD>Не равно</TD>
 
       <TD>Не равно</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a не равно $b.</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a не равно $b.</TD>
 
     </TR>
 
     </TR>
    <TR bgcolor="#FFFFFF" class="mtx4">
 
  
 +
    <TR bgcolor="#FFFFFF" class="mtx4">
 
       <TD>$a !== $b</TD>
 
       <TD>$a !== $b</TD>
 
       <TD>Тождественно не равно</TD>
 
       <TD>Тождественно не равно</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a не равно $b или в случае, если они разных типов (Добавлено в PHP 4) </TD>
 
       <TD><TT><B>TRUE</B></TT> если $a не равно $b или в случае, если они разных типов (Добавлено в PHP 4) </TD>
 
     </TR>
 
     </TR>
 +
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
       <TD>$a &lt; $b</TD>
 
       <TD>$a &lt; $b</TD>
 
 
       <TD>Меньше</TD>
 
       <TD>Меньше</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a строго меньше $b.</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a строго меньше $b.</TD>
 
     </TR>
 
     </TR>
 +
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
       <TD>$a &gt; $b</TD>
 
       <TD>$a &gt; $b</TD>
 
 
       <TD>Больше</TD>
 
       <TD>Больше</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a строго больше $b.</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a строго больше $b.</TD>
 
     </TR>
 
     </TR>
 +
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
       <TD>$a &lt;= $b</TD>
 
       <TD>$a &lt;= $b</TD>
 
       <TD>Меньше или равно</TD>
 
       <TD>Меньше или равно</TD>
 
 
       <TD><TT><B>TRUE</B></TT> если $a is меньше или равно $b.</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a is меньше или равно $b.</TD>
 
     </TR>
 
     </TR>
 +
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
       <TD>$a &gt;= $b</TD>
 
       <TD>$a &gt;= $b</TD>
 
       <TD>Больше или равно</TD>
 
       <TD>Больше или равно</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a больше или равно $b.</TD>
 
       <TD><TT><B>TRUE</B></TT> если $a больше или равно $b.</TD>
 
 
     </TR>
 
     </TR>
 +
 
</TABLE>
 
</TABLE>
 +
 
<p>В случае, если вы сравниваете целое со строкой, строка будет <A  
 
<p>В случае, если вы сравниваете целое со строкой, строка будет <A  
 
href="/learnphp/datatypes/?mn#strtoint" target="_blank">преобразована к числу</A>. В случае, если вы сравниваете две числовые строки, они сравниваются как целые числа.</p>
 
href="/learnphp/datatypes/?mn#strtoint" target="_blank">преобразована к числу</A>. В случае, если вы сравниваете две числовые строки, они сравниваются как целые числа.</p>
<p class="highlight"><CODE><SPAN style="COLOR: #000000"><SPAN  
+
<CODE><SPAN style="COLOR: #000000"><SPAN  
style="COLOR: #0000bb">&lt;?php <BR>
+
style="COLOR: #0000bb">&lt;?php <BR>
    var_dump</SPAN><SPAN  
+
var_dump</SPAN><SPAN  
style="COLOR: #007700">(</SPAN><SPAN style="COLOR: #0000bb">0 </SPAN><SPAN  
+
style="COLOR: #007700">(</SPAN><SPAN style="COLOR: #0000bb">0 </SPAN><SPAN  
style="COLOR: #007700">== </SPAN><SPAN style="COLOR: #dd0000">"a"</SPAN><SPAN  
+
style="COLOR: #007700">== </SPAN><SPAN style="COLOR: #dd0000">"a"</SPAN><SPAN  
style="COLOR: #007700">); </SPAN><SPAN  
+
style="COLOR: #007700">); </SPAN><SPAN  
style="COLOR: #ff8000">// 0 == 0 -&gt; true <BR>
+
style="COLOR: #ff8000">// 0 == 0 -&gt; true <BR>
 
+
</SPAN><SPAN  
   
+
style="COLOR: #0000bb">var_dump</SPAN><SPAN style="COLOR: #007700">(</SPAN><SPAN  
  </SPAN><SPAN  
+
style="COLOR: #dd0000">"1" </SPAN><SPAN style="COLOR: #007700">== </SPAN><SPAN  
style="COLOR: #0000bb">var_dump</SPAN><SPAN style="COLOR: #007700">(</SPAN><SPAN  
+
style="COLOR: #dd0000">"01"</SPAN><SPAN style="COLOR: #007700">); </SPAN><SPAN  
style="COLOR: #dd0000">"1" </SPAN><SPAN style="COLOR: #007700">== </SPAN><SPAN  
+
style="COLOR: #ff8000">// 1 == 1 -&gt; true <BR>  
style="COLOR: #dd0000">"01"</SPAN><SPAN style="COLOR: #007700">); </SPAN><SPAN  
+
<BR>  
style="COLOR: #ff8000">// 1 == 1 -&gt; true <BR>
+
</SPAN><SPAN  
     
+
style="COLOR: #007700">switch (</SPAN><SPAN  
  <BR>
+
style="COLOR: #dd0000">"a"</SPAN><SPAN  
   
+
style="COLOR: #007700">) { <BR>
  </SPAN><SPAN  
+
case </SPAN><SPAN  
style="COLOR: #007700">switch (</SPAN><SPAN  
+
style="COLOR: #0000bb">0</SPAN><SPAN  
style="COLOR: #dd0000">"a"</SPAN><SPAN  
+
style="COLOR: #007700">: <BR>
style="COLOR: #007700">) { <BR>
+
echo </SPAN><SPAN  
 
+
style="COLOR: #dd0000">"0"</SPAN><SPAN  
    case </SPAN><SPAN  
+
style="COLOR: #007700">; <BR>
style="COLOR: #0000bb">0</SPAN><SPAN  
+
break; <BR>
style="COLOR: #007700">: <BR>
+
case </SPAN><SPAN  
        echo </SPAN><SPAN  
+
style="COLOR: #dd0000">"a"</SPAN><SPAN style="COLOR: #007700">: </SPAN><SPAN  
style="COLOR: #dd0000">"0"</SPAN><SPAN  
+
style="COLOR: #ff8000">// Эта ветка никогда не будет достигнута, так как "a" уже сопоставленно с 0 <BR>    
style="COLOR: #007700">; <BR>
+
</SPAN><SPAN  
        break; <BR>
+
style="COLOR: #007700">echo </SPAN><SPAN style="COLOR: #dd0000">"a"</SPAN><SPAN  
    case </SPAN><SPAN  
+
style="COLOR: #007700">; <BR>
style="COLOR: #dd0000">"a"</SPAN><SPAN style="COLOR: #007700">: </SPAN><SPAN  
+
style="COLOR: #ff8000">// Эта ветка никогда не будет достигнута, так как "a" уже сопоставленно с 0 <BR>
+
 
+
       
+
  </SPAN><SPAN  
+
style="COLOR: #007700">echo </SPAN><SPAN style="COLOR: #dd0000">"a"</SPAN><SPAN  
+
style="COLOR: #007700">; <BR>
+
 
         break; <BR>
 
         break; <BR>
 
     } <BR>
 
     } <BR>
 
   </SPAN><SPAN  
 
   </SPAN><SPAN  
style="COLOR: #0000bb">?&gt;</SPAN></SPAN></CODE></p>
+
style="COLOR: #0000bb">?&gt;</SPAN></SPAN></CODE>
<p>Еще одним условным оператором является <ins>тернарный оператор</ins> &quot;<strong>?</strong>&quot;:</p>
+
<p>'''Ще одним умовним оператором є <ins>тернарний оператор</ins> &quot;<strong>?</strong>&quot;:'''</p>
  
<p class="highlight"><CODE><SPAN style="COLOR: #000000"><SPAN  
+
<CODE><SPAN style="COLOR: #000000"><SPAN  
style="COLOR: #0000bb">&lt;?php<BR>
+
style="COLOR: #0000bb">&lt;?php<BR>
</SPAN><SPAN  
+
</SPAN><SPAN  
style="COLOR: #ff8000">// Пример использования тернарного оператора<BR>
+
style="COLOR: #ff8000">// Приклад використання тернарного оператора<BR>
</SPAN><SPAN  
+
</SPAN><SPAN  
style="COLOR: #0000bb">$action </SPAN><SPAN  
+
style="COLOR: #0000bb">$action </SPAN><SPAN  
style="COLOR: #007700">= (empty(</SPAN><SPAN  
+
style="COLOR: #007700">= (empty(</SPAN><SPAN  
style="COLOR: #0000bb">$_POST</SPAN><SPAN style="COLOR: #007700">[</SPAN><SPAN  
+
style="COLOR: #0000bb">$_POST</SPAN><SPAN style="COLOR: #007700">[</SPAN><SPAN  
style="COLOR: #dd0000">'action'</SPAN><SPAN  
+
style="COLOR: #dd0000">'action'</SPAN><SPAN  
style="COLOR: #007700">])) ? </SPAN><SPAN  
+
style="COLOR: #007700">])) ? </SPAN><SPAN  
style="COLOR: #dd0000">'default' </SPAN><SPAN  
+
style="COLOR: #dd0000">'default' </SPAN><SPAN  
style="COLOR: #007700">: </SPAN><SPAN style="COLOR: #0000bb">$_POST</SPAN><SPAN  
+
style="COLOR: #007700">: </SPAN><SPAN style="COLOR: #0000bb">$_POST</SPAN><SPAN  
style="COLOR: #007700">[</SPAN><SPAN style="COLOR: #dd0000">'action'</SPAN><SPAN  
+
style="COLOR: #007700">[</SPAN><SPAN style="COLOR: #dd0000">'action'</SPAN><SPAN  
style="COLOR: #007700">];<BR>
+
style="COLOR: #007700">];<BR>
 +
<BR>
 +
</SPAN><SPAN
 +
style="COLOR: #ff8000">// Запропонованний вище код подібен наступному блоку з використанням if/else<BR>
 +
</SPAN><SPAN
 +
style="COLOR: #007700">if (empty(</SPAN><SPAN
 +
style="COLOR: #0000bb">$_POST</SPAN><SPAN style="COLOR: #007700">[</SPAN><SPAN
 +
style="COLOR: #dd0000">'action'</SPAN><SPAN
 +
style="COLOR: #007700">])) {<BR>
 +
</SPAN><SPAN
 +
style="COLOR: #0000bb">$action </SPAN><SPAN
 +
style="COLOR: #007700">= </SPAN><SPAN
 +
style="COLOR: #dd0000">'default'</SPAN><SPAN
 +
style="COLOR: #007700">;<BR>
 +
} else {<BR>
 +
</SPAN><SPAN
 +
style="COLOR: #0000bb">$action </SPAN><SPAN
 +
style="COLOR: #007700">= </SPAN><SPAN style="COLOR: #0000bb">$_POST</SPAN><SPAN
 +
style="COLOR: #007700">[</SPAN><SPAN style="COLOR: #dd0000">'action'</SPAN><SPAN
 +
style="COLOR: #007700">];<BR>
 +
}<BR>
 +
</SPAN><SPAN
 +
style="COLOR: #0000bb">?&gt;</SPAN></SPAN></CODE>
  
<BR>
+
<p>Выражение <VAR>(expr1) ? (expr2) : (expr3)</VAR> интерпретируется как <VAR>expr2</VAR>, если <VAR>expr1</VAR> вычисляется в <TT><B>TRUE</B></TT>, или как <VAR>expr3</VAR> если <VAR>expr1</VAR> вычисляется в <TT><B>FALSE</B></TT>.</p>
</SPAN><SPAN
+
style="COLOR: #ff8000">// Приведенный выше код аналогичен следующему блоку с использованием if/else<BR>
+
</SPAN><SPAN
+
style="COLOR: #007700">if (empty(</SPAN><SPAN
+
style="COLOR: #0000bb">$_POST</SPAN><SPAN style="COLOR: #007700">[</SPAN><SPAN
+
style="COLOR: #dd0000">'action'</SPAN><SPAN
+
style="COLOR: #007700">])) {<BR>
+
   
+
</SPAN><SPAN
+
style="COLOR: #0000bb">$action </SPAN><SPAN
+
style="COLOR: #007700">= </SPAN><SPAN
+
style="COLOR: #dd0000">'default'</SPAN><SPAN
+
style="COLOR: #007700">;<BR>
+
} else {<BR>
+
  
   
+
 
</SPAN><SPAN
+
[[Оператори мови PHP]]
style="COLOR: #0000bb">$action </SPAN><SPAN
+
style="COLOR: #007700">= </SPAN><SPAN style="COLOR: #0000bb">$_POST</SPAN><SPAN
+
style="COLOR: #007700">[</SPAN><SPAN style="COLOR: #dd0000">'action'</SPAN><SPAN
+
style="COLOR: #007700">];<BR>
+
}<BR>
+
</SPAN><SPAN
+
style="COLOR: #0000bb">?&gt;</SPAN></SPAN></CODE></p>
+
<p>Выражение <VAR>(expr1) ? (expr2) : (expr3)</VAR> интерпретируется как <VAR>expr2</VAR>, если <VAR>expr1</VAR> вычисляется в <TT><B>TRUE</B></TT>, или как <VAR>expr3</VAR> если <VAR>expr1</VAR> вычисляется в <TT><B>FALSE</B></TT>.</p>
+

Поточна версія на 08:16, 7 травня 2010

Операторы сравнения, как это видно из их названия, позволяют сравнивать между собой два значения.

Это в своем роде уникальные операции, потому что независимо от типов своих аргументов они всегда возвращают одно из двух: false или true. Операции сравнения позволяют сравнивать два значения между собой и, если условие выполнено, возвращают true, а если нет — false.

В PHP разрешается сравнивать только скалярные переменные. Массивы и объекты в PHP сравнивать нельзя. Их даже нельзя сравнивать на равенство (при помощи оператора ==), но при выполнении такой операции PHP не выдает предупреждения. Так что удивившись как-то раз, почему два совершенно разных массива при сравнении их с помощью == оказываются вдруг одинаковыми, вспомните, что перед сравнением оба операнда преобразуются в слово <aarray</a>, которое потом и сравнивается.

Также вам возможно будет интересно ознакомиться с разделом <A href="/learnphp/datatypes/?compare_tables" target="_blank">сравнение типов</A>, в котором приведено большое количество соответствующих примеров.

Оператори порівняння:

Пример Название Результат
$a == $b Равно TRUE если $a равно $b.
$a === $b Тождественно равно TRUE если $a равно $b и имеет тот же тип. (Добавлено в PHP 4)
$a != $b Не равно TRUE если $a не равно $b.
$a <> $b Не равно TRUE если $a не равно $b.
$a !== $b Тождественно не равно TRUE если $a не равно $b или в случае, если они разных типов (Добавлено в PHP 4)
$a < $b Меньше TRUE если $a строго меньше $b.
$a > $b Больше TRUE если $a строго больше $b.
$a <= $b Меньше или равно TRUE если $a is меньше или равно $b.
$a >= $b Больше или равно TRUE если $a больше или равно $b.

В случае, если вы сравниваете целое со строкой, строка будет <A href="/learnphp/datatypes/?mn#strtoint" target="_blank">преобразована к числу</A>. В случае, если вы сравниваете две числовые строки, они сравниваются как целые числа.

<?php 
var_dump
(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true

switch ("a") {
case
0:
echo
"0";
break;
case
"a": // Эта ветка никогда не будет достигнута, так как "a" уже сопоставленно с 0
echo "a";
break;
}
?>

Ще одним умовним оператором є тернарний оператор "?":

<?php
// Приклад використання тернарного оператора
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

// Запропонованний вище код подібен наступному блоку з використанням if/else
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>

Выражение (expr1) ? (expr2) : (expr3) интерпретируется как expr2, если expr1 вычисляется в TRUE, или как expr3 если expr1 вычисляется в FALSE.


Оператори мови PHP