2010-11-11 8 views
21

Я искал сайты, чтобы попытаться получить представление об использовании пространств имен PHP, но все они кажутся довольно неопределенными, но то, что они пытаются сделать, легко понять!Использование пространств имен PHP

Мой вопрос: у меня есть файл с именем people.php и в нем задан класс под названием people. Если я создам еще один файл с именем managers.php в той же папке, я могу определить класс, который снова называется people, который расширяет исходный класс people, но в пространстве имен managers, если это так, я должен «включить» оригинал people.php, и если это так, включить после написания: namespace managers?

+3

Одно дело принять к сведению, что пространства имен в PHP не отражает структуру каталогов. Вам необходимо вручную сопоставить структуру каталогов с именами имен пространства имен. – Extrakun

+0

[This] (http://www.sitepoint.com/php-53-namespaces-basics/) будет отличным ресурсом, чтобы очистить все, что вам нужно знать относительно пространств имен PHP. –

ответ

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. Но перед использованием OLD 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(); 
Смежные вопросы