de hecho son tres valores no dos,
0, 1 y valor nulo o sea nada que se considera como cero igual.
$x = '';
if(!$x){
echo 'acá no hay nada';
}
true, 1, valor
lo que pasa esque en php el valor booleano o comparaciones booleanas también pueden incluir strings y decir si hay un valor, en ese caso se procesa automaticamente como si se utilizara return isset(trim($val)) y por eso puedes hacer cosas como estas:
if($_GET['string']){
echo htmlspecialchars($_GET['string'], ENT_QUOTES);
}
en algunos lenguajes eso no se puede hacer.
De todas formas si puedes hacer comparaciones booleanas integrando strings y valores nulos pero lo que no puedes hacer es enviar valores booleanos a los strings porque no te funcionará o por lo menos no en php pero si en c++ por ejemplo
algo similar sucede con un handle, en php son strings llamados resources que se asignan con un id numérico
0, 1 y valor nulo o sea nada que se considera como cero igual.
$x = '';
if(!$x){
echo 'acá no hay nada';
}
true, 1, valor
lo que pasa esque en php el valor booleano o comparaciones booleanas también pueden incluir strings y decir si hay un valor, en ese caso se procesa automaticamente como si se utilizara return isset(trim($val)) y por eso puedes hacer cosas como estas:
if($_GET['string']){
echo htmlspecialchars($_GET['string'], ENT_QUOTES);
}
en algunos lenguajes eso no se puede hacer.
De todas formas si puedes hacer comparaciones booleanas integrando strings y valores nulos pero lo que no puedes hacer es enviar valores booleanos a los strings porque no te funcionará o por lo menos no en php pero si en c++ por ejemplo
algo similar sucede con un handle, en php son strings llamados resources que se asignan con un id numérico