2010-11-11 107 views
21

我一直在寻找网站来尝试使用PHP命名空间,但他们都似乎很模糊,但他们试图做的事很容易理解!使用PHP命名空间

我的问题是:我有一个名为people.php的文件,并在其中定义了名为people的类。如果我在同一个文件夹中创建另一个名为managers.php的文件,我可以再定义一个名为people的类,它扩展了原来的people类,但名称空间为managers,如果是这样,我必须'包含'原始people.php,如果是,包括写作后:namespace managers

+3

有一点要注意,在PHP的命名空间并不能反映你的目录结构。您必须手动将您的目录结构与命名空间名称映射。 – Extrakun 2010-11-11 09:25:32

+0

[This](http://www.sitepoint.com/php-53-namespaces-basics/)将是一个很好的资源,可以清除您需要了解的关于PHP名称空间的所有信息。 – 2015-07-28 11:31:22

回答

4
// people.php 
<?php 
namespace People; 

class People {} 


// managers.php 
<?php 
namespace Managers; 

require_once __DIR__.'/people.php'; 

class People extends \People\People {} 
31

命名空间是一种将包中的相关类进行分组的方法。你描述的可能最好的一个单一命名空间下放到像

<?php // people.php 
namespace com\example\johnslibrary\people; 
abstract class People { 

} 

然后

<?php // manager.php 
namespace com\example\johnslibrary\people; 
require_once 'path/to/People.php'; // can better use autoloading though 
class Manager extends People { 

} 

因为经理是人的一个子类,所以没有太多的理由把他们变成自己的自己的命名空间。他们是专业人士。

如果您希望管理员使用自己的名称空间,则可以这样做,但必须在使用extends关键字时使用完全限定名称,例如,

<?php // manager.php 
namespace com\example\johnslibrary\managers; 
require_once 'path/to/People.php'; 
class Manager extends \com\example\johnslibrary\people\People { 

} 

或导入人民类第一

<?php // manager.php 
namespace com\example\johnslibrary\managers; 
use com\example\johnslibrary\People as People; 
require_once 'path/to/People.php'; 
class Manager extends People { 

} 

See the PHP Manual on Namespaces for extensive documentation.

0

我已经老了PHP类,我需要在新的PHP文件,例如使用它:index.php必须使用iClass.php。但在使用旧的iClass.php之前,我必须修改它,如下所示,以便我可以在index.php中使用它。

iClass.php:

namespace ic; 
class iClass { 
    public static function callMeFromClass() { 
    echo 'OK - you have called me!'; 
    exit; 
    } 
} 

的index.php

namespace inex; 
require_once 'iClass.php'; 
use ic\iClass; 
iClass::callMeFromClass();