Использование пространств имен PHP
Я искал сайты, чтобы попытаться получить представление об использовании пространств имен PHP, но все они кажутся довольно расплывчатыми, но то, что они пытаются сделать, легко понять!
Мой вопрос: у меня есть файл с именем people.php
и в нем задан класс под названием people
. Если я создам еще один файл с именем managers.php
в той же папке, я могу определить класс, снова называемый people
, который расширяет исходный класс people
, но в пространстве имен managers
, если это так, я должен "включить" original people.php
, и если это так, я поставлю include после записи: namespace managers
?
Ответы
Ответ 1
Пространства имен - это способ группировки связанных классов в пакетах. То, что вы описали, лучше всего разместить под одним пространством имен, например
<?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 {
}
потому что диспетчер является подклассом People, поэтому нет причин поместить их в свое пространство имен. Они являются специализированными людьми.
Если вы хотите, чтобы менеджеры находились в своем собственном пространстве имен, вы можете сделать это, но при использовании ключевого слова extends
использовать имя с полным именем, например
<?php // manager.php
namespace com\example\johnslibrary\managers;
require_once 'path/to/People.php';
class Manager extends \com\example\johnslibrary\people\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 {
}
См. Руководство по PHP для пространств имен для подробной документации.
Ответ 2
// people.php
<?php
namespace People;
class People {}
// managers.php
<?php
namespace Managers;
require_once __DIR__.'/people.php';
class People extends \People\People {}
Ответ 3
У меня есть старый 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();