如果为TRUE,对false语句的测试是否执行相同的语句

时间:2014-04-18 13:55:26

标签: php oop if-statement

下面的代码块实际上在整个脚本运行时执行。我不清楚的是方法write只测试if data is not written to file的情况。那么应该抛出异常。它确实说if $data exist and writeable然后写入它。

      public function write($data) {
     if (@!fwrite($this->_fp, $data . "\n")) {
        throw new Exception('Could not write to the file.');
     }
  }

以前是这样的:

     if( condition is true ) {

         echo 'Run Code';

      } else {

       echo 'Throw Exception';

      }

或类似的东西

public function query($sql) {
        $result  = mysql_query($sql, $this->connection);
        if(!$result){
            die("Database Query Failed : ". mysql_error());
        }
        return $result;
    }

这怎么可能?

3 个答案:

答案 0 :(得分:2)

here中所述if(expr)evaluates expr为其布尔值..这意味着在您的示例中调用write函数时,{ {1}}函数始终执行,然后fwrite检查它是否返回虚假或真值。
并且从doc if因此fwrite() returns the number of bytes written, or FALSE on error.在错误时评估为true,并抛出异常

答案 1 :(得分:1)

我不擅长解释这类事情,但让我们试试:)

我认为你误解了条件是如何运作的。

让我们使用一个简单的例子

if($x == 1) {
    echo 'Run Code';
} else {
    echo 'Throw Exception';
}

if和你放在里面的是独立的。条件只是一个返回布尔值的语句,而if只是测试一个布尔值(无论返回它)。所以你可以像这样改变这个例子:

$is_x_equal_to_one = ($x == 1); // $is_x_equal_to_one now contains true or false
if($is_x_equal_to_one) {
    echo 'Run Code';
} else {
    echo 'Throw Exception';
}

!运算符否定表达式。如果是真的,它将返回false,如果为false,则返回true。 所以你可以像这样恢复你的状况:

$is_x_equal_to_one = ($x == 1);
if(!$is_x_equal_to_one) {
    echo 'Throw Exception';
} else {
    echo 'Run Code';
}

现在如果你不需要运行任何代码,如果$x不等于1,你只想说“某些内容已被破坏”,该怎么办? else语句总是可选的:

$is_x_equal_to_one = ($x == 1);
if(!$is_x_equal_to_one) {
    echo 'Throw Exception';
}

fwrite不仅写入文件,如果它不起作用,它也会返回false。如果有效,则返回正整数。使用PHP将正整数计算为true。 这意味着您可以像这样使用它:

$is_write_successful = fwrite($this->_fp, $data . "\n");
if(!$is_write_successful) {
    echo 'Throw Exception';
}

最后,您可以通过删除无用的临时变量来缩短此代码:

if(!fwrite($this->_fp, $data . "\n")) {
    echo 'Throw Exception';
}

答案 2 :(得分:0)

您可以重写if

$returnValue = @fwrite($this->_fp, $data . "\n");
if (!$returnValue) {

因此它将始终执行fwrite函数。