PHP - 理解" if循环的表达式"与fopen()

时间:2015-02-01 09:32:26

标签: php loops fopen

我对PHP学习书(Wrox,从PHP 5.3开始)的练习之一有一点理解。

当我们检查文件“count”存在时,此代码是部分。如果没有,我们需要创建它。真的不是高度复杂,但我确实有问题。我就是这样写的:

  1. 使用!files_exist()
  2. 检查文件是否存在
  3. 如果没有,请创建它并使用fopen()和fwrite()
  4. 将其初始化为0
  5. 如果无法创建它,则(else)显示错误消息
  6. 他们是如何写的,我看了几次这个结构。当要执行某些操作时,最后会出现“else”表达式。在我的逻辑中,我将代码放在“if”表达式中执行。

    $counterFile = “./count.dat”;
    
    if ( !file_exists( $counterFile ) ) {
       if ( !( $handle = fopen( $counterFile, “w” ) ) ) {
       die( “Cannot create the counter file.” );
       } else {
               fwrite( $handle, 0 ); 
               fclose( $handle );
       }
    }
    

    我的问题:

    1) 是否有规则如何构建循环以及为什么方法更好?

    2) 代码是在表达式中执行还是只检查是否为真?

    $counterFile = “./count.dat”;
    
    if ( !file_exists( $counterFile ) ) {
       if ( !( $handle = fopen( $counterFile, “w” ) ) ) {
       die( “Cannot create the counter file.” );
       } else {
               fopen( $counterFile, “w” ) // I thought this code is not executed in the if expression? This is why I would declare it right here.
               fwrite( $handle, 0 ); 
               fclose( $handle );
       }
    }
    

    感谢您的帮助。祝你有愉快的一周。

3 个答案:

答案 0 :(得分:0)

1)

无论什么对你最有意义,并且(希望)最容易让其他人阅读你的代码来理解 因此,如果测试负面情况然后创建文件是有意义的。您可能不需要if语句的任何 else 部分 在上面的示例中,您可以在没有else部分的情况下编写第二个if语句并获得相同的结果:

if ( !file_exists( $counterFile ) ) {
    if ( !( $handle = fopen( $counterFile, “w” ) ) ) {
        die( “Cannot create the counter file.” );
    } 
    // if the file couldn't be opened above, the program won't get to here, because of the _die()_
    // otherwise the file is open, no need to open again 
    //   fopen( $counterFile, “w” ) 
    fwrite( $handle, 0 ); 
    fclose( $handle );
}

或者你可能会认为如果你先使用正常情况然后处理 else 块中的错误就更容易阅读,这样可以避免! (不)可能会在复杂的表达中混淆。

if ( !file_exists( $counterFile ) ) {
    if ( $handle = fopen( $counterFile, “w” ) ) { 
        fwrite( $handle, 0 ); 
        fclose( $handle );
    }
    else{//$handle not 'true'
        die( “Cannot create the counter file.” );
    } 

}

2)

为了确定if语句的条件是否为真,需要计算条件中的表达式。因此,如果表达式涉及运行函数(在您的情况下 file_exists fopen()),则将运行该函数以获得结果。
将条件评估为true or false后,接下来将执行 then 块或 else 块,但不会同时执行。

答案 1 :(得分:0)

    $counterFile = "./count.dat"; // File
    $count = "0"; // String of count
if (!file_exists($counterFile)){ 
     $cFopen = fopen($counterFile, "a+"); 
    /* *r+* = read and write or *a+* for automated create if not exist, chown command for add right in folder for user apache or nginx, www-data:www-data */
    if ($cFopen==false) { 
      die("La création du fichier a échoué"); // or exit();
    } else { 
     fseek($monfichier, 0); // cursor in start line
     fputs($cFopen, $count); // add $count (0) to file opened (count.dat)
     fclose($counterFile); // close file
    }
}

答案 2 :(得分:0)

你做了两次相同的事情:)

if (!( $handle = fopen( $counterFile,“w”))) // in this statement you try opening it and check if you have opened it
{
    die( “Cannot create the counter file.” );        // Code thats executed if $handle is false or doesn't exist (so opening failed)
} 
else 
{        // Code thats executed if $handle does exist and is not false, so you opened it succesfully and you can write in it! So don't open it again :)
    fwrite( $handle, 0 );         
    fclose( $handle );
}