PHP:仅使用类(如果存在)

时间:2014-06-01 00:26:16

标签: php

在文件

中使用类名之前,有没有办法确保文件存在

这是为了避免错误,因为它不存在?我研究了这个,但没有人告诉你该怎么做。也许这就是因为没有办法或者只有秘密php编码器知道的方式所以请不要因为提供的信息量而不喜欢这个问题。

我试过

if (class_exists("Authentication"))
{
     use go\Authentication;
}

但是我收到了这个错误

Parse error: syntax error, unexpected 'use' (T_USE) in C:\xampp\htdocs\index.php on line 29

我也试过这个方法

if (file_exists("/go/authentication.php") { use go\Authentication; }

它给了我与previouse方法相同的错误

2 个答案:

答案 0 :(得分:1)

您使用use错误!!

  

The 'use' keyword must be declared in the outermost scope of a file (the global scope) or inside namespace declarations. This is because the importing is done at compile time and not runtime, so it cannot be block scoped.

对于即时加载课程而言。您可以按照评论中的建议使用自动加载

旁注。如果您的类位于名称空间中,例如

namespace foo\bar; 
class tar{

}

然后检查它的正确方法不存在

class_exists('tar')

而是:

class_exists('\foo\bar\tar')

use foo\bar;

class_exists('tar');

答案 1 :(得分:1)

除了你的初衷之外,你可以在the documentation中阅读:

  

use关键字必须在文件的最外层范围(全局范围)或命名空间内声明中声明。这是因为导入是在编译时完成的,而不是运行时,所以它不能是块作用域。以下示例将显示非法使用use关键字:

这意味着它应该在文件的顶部使用,或者至少在最外层的范围内使用。虽然您的案例可能是最外层的范围,但它会绑定到条件,这会使您的规则非法,类似于文档中提供的示例:

<?php
namespace Languages;

class Greenlandic
{
  use Languages\Danish;

  ...
}
?>

关于您的问题,您可以这样做:

if (class_exists("Authentication"))
  $Auth = new Authentication();

但是,请查看autoloading,因为这似乎更有可能是您正在寻找的。