!== , ===compares not only the value but also the type.

解决方案 »

  1.   

    这个是遍历文件的代码中间的一句话搞不懂
    function TravelDir( $dirURL, $nIndent=0 ) {
            global $nIndInc;
            if ($handle = opendir($dirURL)) {
                    while (false !== ($file = readdir($handle))) {
                            if ($file != "." && $file != "..") {
                                    $wholeFileName = $dirURL."/".$file;
                                    if (is_dir($wholeFileName)) {
                                            PrintFileName($file, $nIndent);
                                            TravelDir($wholeFileName,$nIndent+$nIndInc);
                                    } else if (is_file($wholeFileName)) {
                                            PrintFileName($file, $nIndent);
                                    } else {
                                            PrintErr($file);
                                    }           
                            }                
                    }
            }
    }
      

  2.   

    false !== ($file = readdir($handle))
    readdir()函数是依次返回文件名,那么!==  是拿false 和一个文件名进行比较么?假如readdir($handle) 函数失败,将返回false,成功将返回文件名!
    因此$file = readdir($handle)要么是返回文件名,要么是false.
    false !== ($file = readdir($handle))表示返回文件名时进行操作
      

  3.   


    "false !== ($file = readdir($handle))表示返回文件名时进行操作"是指如果$file = readdir($handle)是返回false,那么while循环就停止了,如果是文件名就继续循 环是么 ? if ($file != "." && $file != "..") 这句话里的"."和".."是什么意思啊?
      

  4.   

    if ($file != "." && $file != "..")  "."和".."是排除,没有这个的话dir出来的有"."和".."两个文件夹!
      

  5.   

    <?php$dirURL = '.';  //base direction, related url
    $nIndInc = 4;  //the num of indent
            
    TravelDir($dirURL);function TravelDir( $dirURL, $nIndent=0 ) {
            global $nIndInc;
            if ($handle = opendir($dirURL)) {
                    while (false !== ($file = readdir($handle))) {
                            if ($file != "." && $file != "..") {
                                    $wholeFileName = $dirURL."/".$file;
                                    if (is_dir($wholeFileName)) {
                                            PrintFileName($file, $nIndent);
                                            TravelDir($wholeFileName,$nIndent+$nIndInc);
                                    } else if (is_file($wholeFileName)) {
                                            PrintFileName($file, $nIndent);
                                    } else {
                                            PrintErr($file);
                                    }           
                            }                
                    }
            }
    }function PrintFileName($file, $nIndent) {
            for( $i=0; $i<$nIndent; $i++ )        echo "&nbsp;";
            echo $file;
            echo "<br>";
    }
    function PrintErr($file) {
            echo "<font color=red>error :</font> {$file}! Maybe the program is something wrong!<br>";
    }
    ?> 
    定义这个变量是干吗用的啊 ?     $dirURL = '.' ;  $nIndInc = 4;
      

  6.   

    $dirURL = '.'
    指定本php文件所在的文件夹!
      

  7.   


          2 function TravelDir($dirURL, $nIndent=0 )
          3 {
          4     global $nIndInc;
          5     if ($handle = opendir($dirURL)) {                   //打开传进来的目录
          6         while (false !== ($file = readdir($handle))) {  //如果目录可读R来味寥胛募?[0m
          7             if ($file != "." && $file != "..") {        //如果文件不是 "." 并且不是 ".."    
          8                 $wholeFileName = $dirURL."/".$file;     //
          9                 if (is_dir($wholeFileName)) {           //如果读入的文件还是一个目录(目录也可能)  --->else line 12 
         10                     PrintFileName($file, $nIndent);     //调用PrintFileName函数,打印一些信息,接着
         11                     TravelDir($wholeFileName,$nIndent+$nIndInc); //进入这个是目录的文件,即此目录继续遍历其下的所有文件
         12                 } else if (is_file($wholeFileName)) {   //如果是文件,而不是目录
         13                     PrintFileName($file, $nIndent);     //则,只打印一些信息,同样的调用PrintFileName函数
         14                 } else {                                //否则,其它意外情况,则
         15                     PrintErr($file);                    //调用PrintErr函数打印错误信息。
         16                 }
         17             }
         18         }
         19     }
         20 }
         21 
         22 dirURL = '.' ;//遍历的初始目录  
    $nIndInc = 4;//初始深度
      

  8.   

    定义这个变量是干吗用的啊 ?     $dirURL = '.' ;  $nIndInc = 4;
     $dirURL  为了遍历当前目录
     $nIndInc = 4; 输出打印格式用到    filename
             fileneme
                    filename 
    分层次而已
      

  9.   

    这个表达式这样写是很有必要的。因为false存在string和bool两种的可能性。这里它用了 "!=="而没有用"!="是正确的做法,因为返回文件名如果是个string类型的"false"会另这个表达式产生歧异。而用作比较的false是bool类型的。这里用"!=="不仅对值做了判断,还对类型做了判断,就不会造成这种歧异了。
      

  10.   

    lvlfforever大哥写的很详细啊,谢谢啊...不过现在还没看懂:(
      

  11.   

    因为false存在string和bool两种的可能性,string  和bool  什么意思?
      

  12.   

    "!="这个比较只比较值,而不比较值的类型,readdir()失败的话会返回一个布尔型(bool)的"false",它这里比较的本意是布尔型的"false".但如果你有一个文件名叫"false",它返回的是一个字符串(string)类型的"false",那么使用"!="就会产生问题了。所以这里用"!=="是正确做法,"!=="不仅会比较返回的值是不是"false",还会比较这两个值的类型是否相等。
      

  13.   

    ShadowSniper大哥懂了,谢谢
      

  14.   

    !==类型不一样,也返回 true
      

  15.   

    $wholeFileName = $dirURL."/".$file;  $file前面为什么加上$dirURL."/",什么意思啊?大哥帮忙
      

  16.   

    $dirURL连上'/'再连上$file不就是这个文件的路径嘛,比如test/test.php这是一个相对路径。当有文件要引用这个文件的时候,当然要知道他的路径,光知道名字不知道路径怎么引用。