$ var = value实际返回什么?

时间:2011-07-02 23:30:22

标签: php variables initialization

对我来说,这似乎是PHP的一个非常神秘的部分,我想知道是否有人可以澄清因为手册似乎没有包含这个(或者我在任何地方都找不到它)。

这些东西会回归什么?

if($c = mysql_connect($host, $user, $pass)){
 echo 'Success';
}else{
 echo 'Failure';
}

这总是会回应'成功',因为$ c成功分配为true或false?我想知道我是否可以这样做,或者我是否必须在前一行定义$ c。

感谢。

4 个答案:

答案 0 :(得分:7)

Assignment Operators中提及:

  

赋值表达式的值是指定的值。也就是说,“$ a = 3”的值为3

$c = ... true如果true分配给$cfalse分配false,则while(($row = mysql_fetch_array(...))) 会产生{{1}}。

这也是迭代查询结果的原因

{{1}}

作品。

答案 1 :(得分:4)

如有疑问,请构建测试用例!

构建测试用例:

if ( $c = true ) {
  echo 'Success';
} else {
  echo 'No Success';
}

在线运行:http://codepad.org/jxylNzOu

你会注意到第一个块只会在条件出现true时被执行(或者在被问及时评估为true),所以它不会询问是否成功应用了一个值到$c,而不是应用于$c的值是true

关于您的具体示例......

如果您尝试打开与MySQL的连接的情况,$c如果建立连接则为true,导致if-statement的第一个阻止跑了。否则,如果没有建立连接,$c将为false,使if-statement的条件为false,从而导致else块的运行。

根据mysql_connect()的{​​{1}},可以从此函数返回以下两项内容之一。

  1. MySQL链接标识符(如果建立了连接)
  2. FALSE,表示无法建立连接。
  3. 因此以下代码示例之间没有区别

    $conn = mysql_connect( $host, $user, $pass );
    if ( $conn ) { /*...*/ }
    

    if ( $conn = mysql_connect( $host, $user, $pass ) {
      /*...*/
    }
    

答案 2 :(得分:0)

它并不总是回应'​​成功'。 PHP首先将mysql_connect的结果赋给$to,然后计算$to的布尔值。但最好使用这种方式来确保可理解性:

$c = mysql_connect($host, $user, $pass)
if($to) {
    echo 'Success';
} else{
    echo 'Failure';
}

答案 3 :(得分:0)

PHP是一种“弱类型”语言,这意味着php不需要(也不支持它)变量的显式类型声明。

注意消费或评估0 1为真/假(布尔值)

以此案例为样本:

$s = "0"; //String s = '0'
$res = strstr($s,'0'); //Search the character zero into the string $s
if ($res){
  echo "Zero found!";
}else{
  echo "Zero not found!"
}
//Hey!! Whats up!!?? Zero is not found!

这是因为零(函数strstr的返回值)被评估为FALSE,在某些情况下会产生意外结果。

正确的方法是使用Not Identical运算符!==,其中值和类型进行比较

上一个例子应该是:

$s = "0"; //String s = '0'
$res = strstr($s,'0'); //Search the character zero into the string $s
if ($res !== FALSE){//Check for value AND type
  echo "Zero found!";
}else{
  echo "Zero not found!"
}
//yeah now it works!

所以在你的情况下我会将if语句写成:

if(($c = mysql_connect($host, $user, $pass)) !== FALSE){
 echo 'Success';
}else{
 echo 'Failure';
}