Использование пространств имен PHP - PullRequest
22 голосов
/ 11 ноября 2010

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

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

Ответы [ 3 ]

32 голосов
/ 11 ноября 2010

Пространства имен - это способ группировки связанных классов в пакеты. То, что вы описываете, лучше всего поместить в одно пространство имен, например

<?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 {

}

или сначала импортируйте класс 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 по пространствам имен.

4 голосов
/ 11 ноября 2010
// people.php
<?php
namespace People;

class People {}


// managers.php
<?php
namespace Managers;

require_once __DIR__.'/people.php';

class People extends \People\People {}
0 голосов
/ 22 ноября 2016

У меня есть старый класс 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...