2017-02-21 86 views
0

我想了解以下PHP脚本

<?php 

    if ($handle = opendir('files'.'/')) { 
     while ($file = readdir($handle)) { 
      echo $file.'<br>'; 
     } 
    } 

?> 

我不完全理解这是如何工作,因为$handle变量似乎要么不声明或if条件内声明。但是,如果在if条件内声明它,测试的条件是什么?同样,对于while循环,测试的是什么?我直观地知道它是以某种方式测试目录列表的末尾,但是究竟是什么为if条件失败或while条件失败?在这里使用if就像错误处理方法吗?我查找了PHP中的错误处理,但没有找到它。

回答

3

在PHP中使用,赋值运算的整体价值是分配的值。这意味着,当你这样做:

($handle = opendir('files'.'/')) 

你不仅是分配到$handleopendir()的结果,而是整个声明也计算为这一结果。

同样在PHP中,任何有效的对象都被视为“真实”,因此它可以在布尔检查中计算为true。所以这个:

if ($handle = opendir('files'.'/')) 

意志opendir()结果分配给$handle将检查分配的结果为truefalse。因此,如果opendir()失败,则if会看到一个false,并且未输入该块。

while相同,或检查作业结果的任何其他操作。

1

这是一种编码风格,你可以在PHP

if语句正在创建的变量和评估的同时脱身。如果它失败,opendir将返回false,这意味着它在if条件内的代码将不会运行。

一般这种风格不是一个好主意,因为往往这种代码实际上是它本来是一个==,如if($variable=true)if($variable==true)有很大的不同,但不一定容易被发现,如果你通过代码扫描错误。

在while循环中使用$file =虽然是相当正常的方法,并且用于迭代某些内容。

readdir - http://php.net/manual/en/function.readdir.php - 是迭代等都可以在这个风格

+0

那么,这是否意味着'if'条件不可能失败? – Addem

+0

另外,我已经阅读过有关'readdir'函数的文档,但是我仍然不清楚发生了什么。这看起来像使用while循环应该使用'for'循环。 – Addem

+0

opendir可以返回false,在这种情况下它会失败 – edmondscommerce

2

在每种情况下,该值都分配给该变量,然后进行真实性测试。

你可以重写代码:

$handle = opendir('files'.'/'); 
if ($handle) { 
    $file = readdir($handle); 
    while ($file) { 
     echo $file.'<br>'; 
     $file = readdir($handle) 
    } 
} 

那么,这是否意味着,如果条件不可能失败?

如果opendir()未返回真值,则将失败。例如,如果目录不存在,就会发生这种情况。