Я программировал в PHP некоторое время, но я до сих пор не понимаю разницы между == и ===. Я знаю, что = задание. И == равно. Итак, какова цель ===?Что делает === в PHP
ответ
Он сравнивает оба значения и типа равенства.
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 список других языков, которые имеют аналогию тройных равных.
Он будет проверять, если тип данных такой же, как и значение
if ("21" == 21) // true
if ("21" === 21) // false
===
сравнивает значение и типа.
== не сравнивает типы, === делает.
0 == false
оценивается как истина, но
0 === false
не
Это настоящее сравнение равенства.
"" == False
например: true
.
"" === False
является false
Это правда, что === сравнивает оба значения и тип, но есть один случай, который не был упомянут еще и что если сравнивать объекты с == и === ,
Учитывая следующий код:
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
В случае объектов === сравнивает ссылки, а не тип и значение (как $ а и $ Ь имеют как равного типа и значения).
Руководство по PHP содержит a couple of very nice tables («Свободные сравнения с ==» и «Строгие сравнения с ===»), которые показывают, какой результат == и === даст при сравнении различных типов переменных.
Минимально == == быстрее, чем ==, потому что нет автоматизированного литья/слияния, но его минимальное значение вряд ли стоит упомянуть. (конечно, я только что упомянул об этом ...)
- 1. PHP: Что делает :: класс?
- 2. Что делает функция PHP @ $ _?
- 3. Что делает оператор php «= =»?
- 4. Что делает префикс '@' в PHP?
- 5. Что делает AsynchDNS в php?
- 6. Что делает INCLUDE_CHECK в php?
- 7. В PHP, что делает синтаксис $ {$}?
- 8. Что делает session_destroy() в PHP?
- 9. Что делает @ персонаж в PHP?
- 10. Что делает @ персонаж в PHP?
- 11. Что делает @ в этом php?
- 12. Что делает \»сделать в PHP
- 13. PHP, что делает @return?
- 14. Что делает? знак означает, что в PHP
- 15. Что делает функция «перегрузки» php?
- 16. Что делает PHP die() return
- 17. PHP: Что действительно делает pcntl_fork()?
- 18. Что делает этот код PHP?
- 19. PHP: Что действительно делает CURLOPT_URL?
- 20. Что делает оператор PHP = & mean?
- 21. Что делает функция заголовка php?
- 22. PHP: Что делает __ ('Some text')?
- 23. Что делает следующая функция PHP?
- 24. Что делает этот PHP-фрагмент?
- 25. Что здесь делает PHP? Ошибка?
- 26. Что делает эта строка php?
- 27. Что делает функция подчеркивания PHP?
- 28. что делает параметр «Пуск» в функции PHP strcspn() делает
- 29. Что делает слово «объект» в PHP?
- 30. Что делает "->" делать в PHP?
В случае с strpos эти «ложные»/«истинные» комментарии не очень ясны, но я думаю, вы можете понять это достаточно хорошо в контексте. – luiscubal
Кроме того, из-за результатов, о которых указывает Том, почти всегда лучше использовать === или! == при оценке возвращаемых значений. Даже если функция в настоящее время не возвращает двусмысленное значение, это может измениться в будущем. –
@luiscubal - Я уточнил. –