1

如果我在根目录中有一个System文件夹,其中包含一个Database文件夹,其中包含一个包含类的Database.php文件

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

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

如何创建一个命名空间来访问Database::Connect(); 我真正在命名空间中苦苦挣扎的类。

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

4

2 回答 2

4

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

例如。

文件:系统/数据库.php

namespace MyProject;

class Database {
// ...
}

文件 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();

文件: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();

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

于 2012-12-11T16:14:04.983 回答
1

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

namespace System\Database;

然后,在调用 Connect 方法时:

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

您的文件结构仅在自动加载要包含在脚本中的文件时与您的名称空间相关,因此如果您要在脚本中手动包含 Database.php,您可以根据需要设置名称空间。

于 2012-12-11T16:12:20.310 回答