Php is_dir表示dir不存在,但它存在

Php is_dir表示dir不存在,但它存在,php,filesystems,Php,Filesystems,我不确定这里出了什么问题。由于某种原因,_dir函数对我来说不能正常工作 class A { private $path public function setPath($path) { if(!is_dir(!$path)){ throw new Exception('Invalid path'); } } } $obj = new A; $obj->setPath('/usr/htdocs/site/'); 在这行代码之后,抛出异常

我不确定这里出了什么问题。由于某种原因,_dir函数对我来说不能正常工作

class A
{
  private $path

  public function setPath($path)
  {
     if(!is_dir(!$path)){
      throw new Exception('Invalid path');
    }

  }
}

$obj = new A;
$obj->setPath('/usr/htdocs/site/');

在这行代码之后,抛出异常无效路径。我检查了,并且/usr/htdocs/site/path存在。可能是什么问题?

删除
路径变量之前

试着这样做:

 if(!is_dir($path)){
      throw new Exception('Invalid path');
    }

!$路径意味着如果有任何东西在里面$路径,它将是错误的。就是这样!is_dir(false)

我认为您的代码将是if(!is_dir(!$path)){…而不是if(!is_dir(!$path)){

小更新:

正如@NiettheDarkAbsol所说,is_dir将字符串(目录名)作为参数,因此false[来自!$path($path应该是“/usr/htdocs/site/”,在本例中,所以!$path应该是bool false)]将转换为字符串“”(空)

在大多数常用的文件系统中,“”是无效的目录名。因此,is_目录将找不到使用该无效名称的任何目录。因此,它将返回false,从而触发异常引发以报告路径无效


感谢@NiettheDarkAbsol告诉我剩下的事情。

!$path
-Wut?删除该
。删除$path前面的“!”。在
private$path
的末尾放一个分号,否则它将抛出
解析错误:语法错误,意外的“public”(T\u public),在…
中应为“,”或“;”,并删除前面所述的
。不要停在那里。什么是
!is_dir(false)
做的?它将
false
转换为字符串,因为它需要所述字符串。所以它正在做
!is_dir(“”)
…如果你有一个不知何故没有名字的目录会发生什么?@NiettheDarkAbsol抱歉,我的经验很低。我不知道当目录名为空时会发生什么。我认为这与文件系统有关,比如文件系统如何在文件表中定位/查找文件。好消息是,文件和文件夹名可以永远不要空着。除非你在某种异国情调的定制操作系统上,出于某种原因允许它。