PHP命名空间和文件夹

时间:2012-12-11 16:00:02

标签: php namespaces

如果根目录中有系统文件夹,其中包含 Database.php 数据库 数据库文件夹包含类的文件

class Database{
   static function Connect(){
      echo "connect";
   }
}

我从根目录中的index.php调用它。

如何创建名称空间以访问类Database::Connect(); 我真的在努力使用命名空间。

我是否需要将namespace System\Database放在Database.php文件的顶部?任何不在php.net页面上的好例子?

2 个答案:

答案 0 :(得分:3)

命名空间(在PHP中)实际上只是一种防止项目中类之间命名冲突的方法。它们已被使用了一段时间(在它们被正式支持之前),其形式为名为“Zend_Controller_Action_Helper”的类。 PHP5.3引入“真实”命名空间实际上只是意味着我们现在可以通过“使用”命名空间在我们的代码中使用简短易读的名称。

例如

file:system / database.php

namespace MyProject;

class Database {
// ...
}

file public / index.php

require_once '../system/database.php';

// here we have to use the fully qualified name of the Database class,
// this is similar to the old unofficial underscore method.
$db = \MyProject\Database::connect();

file:public / index2.php

require_once '../system/database.php';
use MyProject\Database;

// here we can simply use "Database" because the "use" statement says:
// for this file we are using the "Database" class from the "MyProject" namespace
$db = Database::connect();

命名空间仅按惯例与目录相关(对于自动加载),它们本身不会改变包含和使用类的方式。

答案 1 :(得分:1)

如果要将Database类命名为System \ Database,则需要在类声明上方添加:

namespace System\Database;

然后,在调用Connect方法时:

\System\Database\Database::Connect();

当您自动加载要包含在脚本中的文件时,您的文件结构仅与您的命名空间相关,因此如果您要在脚本中手动包含Database.php,您可以创建命名空间。想。