Подтвердить что ты не робот

Использование пространств имен PHP

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

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

4b9b3361

Ответ 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();