Что делает === в PHP - PullRequest
       66

Что делает === в PHP

5 голосов
/ 15 мая 2009

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

Ответы [ 8 ]

26 голосов
/ 15 мая 2009

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

 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

Вот хорошая таблица в википедии , в которой перечислены другие языки, имеющие аналогию с тройным равенством.

12 голосов
/ 15 мая 2009

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

С учетом следующего кода:

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

В случае объектов === сравнивает ссылку, а не тип и значение (поскольку $ a и $ b имеют одинаковый тип и значение).

6 голосов
/ 15 мая 2009

В руководстве по PHP есть пара очень хороших таблиц ("Слабые сравнения с ==" и "Строгие сравнения с ==="), которые показывают, какой результат даст == и ===, когда сравнение различных типов переменных.

4 голосов
/ 15 мая 2009

Он проверит, совпадает ли тип данных со значением

if ("21" == 21) // true
if ("21" === 21) // false
3 голосов
/ 15 мая 2009

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

2 голосов
/ 15 мая 2009

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

0 == false

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

0 === false

не

0 голосов
/ 15 мая 2009

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

0 голосов
/ 15 мая 2009

Сравнение истинного равенства.

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

"" === False - это false

...