我对PHP学习书(Wrox,从PHP 5.3开始)的练习之一有一点理解。
当我们检查文件“count”存在时,此代码是部分。如果没有,我们需要创建它。真的不是高度复杂,但我确实有问题。我就是这样写的:
他们是如何写的,我看了几次这个结构。当要执行某些操作时,最后会出现“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 );
}
}
感谢您的帮助。祝你有愉快的一周。
答案 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 );
}