2009-05-14 3 views
5

Я программировал в PHP некоторое время, но я до сих пор не понимаю разницы между == и ===. Я знаю, что = задание. И == равно. Итак, какова цель ===?Что делает === в PHP

ответ

26

Он сравнивает оба значения и типа равенства.

if("45" === 45) //false 
if(45 === 45) //true 
if(0 === false)//false 

Он имеет аналог: ==, который сравнивает тип и значение неравенства

if("45" !== 45) //true 
if(45 !== 45) //false 
if(0 !== false)//true 

Это особенно полезно для таких функций, как StrPos - которые могут возвращать 0 правомерно!.

strpos("hello world", "hello") //0 is the position of "hello" 

//now you try and test if "hello" is in the string... 

if(strpos("hello world", "hello")) 
//evaluates to false, even though hello is in the string 

if(strpos("hello world", "hello") !== false) 
//correctly evaluates to true: 0 is not value- and type-equal to false 

Here's a good wikipedia table список других языков, которые имеют аналогию тройных равных.

+0

В случае с strpos эти «ложные»/«истинные» комментарии не очень ясны, но я думаю, вы можете понять это достаточно хорошо в контексте. – luiscubal

+0

Кроме того, из-за результатов, о которых указывает Том, почти всегда лучше использовать === или! == при оценке возвращаемых значений. Даже если функция в настоящее время не возвращает двусмысленное значение, это может измениться в будущем. –

+0

@luiscubal - Я уточнил. –

4

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

if ("21" == 21) // true 
if ("21" === 21) // false 
3

=== сравнивает значение и типа.

2

== не сравнивает типы, === делает.

0 == false 

оценивается как истина, но

0 === false 

не

0

Это настоящее сравнение равенства.

"" == False например: true.

"" === False является false

12

Это правда, что === сравнивает оба значения и тип, но есть один случай, который не был упомянут еще и что если сравнивать объекты с == и === ,

Учитывая следующий код:

class TestClass { 
    public $value; 

    public function __construct($value) { 
    $this->value = $value; 
    } 
} 

$a = new TestClass("a"); 
$b = new TestClass("a"); 

var_dump($a == $b); // true 
var_dump($a === $b); // false 

В случае объектов === сравнивает ссылки, а не тип и значение (как $ а и $ Ь имеют как равного типа и значения).

6

Руководство по PHP содержит a couple of very nice tables («Свободные сравнения с ==» и «Строгие сравнения с ===»), которые показывают, какой результат == и === даст при сравнении различных типов переменных.

0

Минимально == == быстрее, чем ==, потому что нет автоматизированного литья/слияния, но его минимальное значение вряд ли стоит упомянуть. (конечно, я только что упомянул об этом ...)

Смежные вопросы