Отличие «if ( isset( $var ) )» от «if ( $var )» в PHP

Отличие «if ( isset( $var ) )» от «if ( $var )» в PHP

При написании PHP-скриптов довольно часто используются следующие два выражения:
if ( isset( $var ) );
if ( $var ).

Для многих начинающих программистов, в том числе и меня, отличие между ними изначально было не определено, от чего в скриптах получались «дыры». Разобравшись «что к чему», я решил написать данный пост.

На самом деле всё просто — давайте проанализируем что будут возвращать выражения в условиях ( isset( $var ) ) и просто ( $var ) при $var = 0:

<?php

$var = 0;

var_dump( isset( $var ) );    // bool(true)
var_dump( $var );             // int(0)

?>

Выражения в условиях конструкции if вычисляются в булев тип, поэтому в первом случае инструкция выполнится, а во втором — нет, так как ноль — это булево значение false. Тоже самое будет и при следующих значениях переменной $var:

<?php

$var = '';
$var = false;

?>

Чтобы понять как это работает, нужно знать типы данных PHP (в частности, преобразование в булев тип), а также возвращаемые значения функции isset().