---
title: Пространство имён в php 5.3 и php 6
date: 2008-04-13T10:00
tags: [php]
---

Пространство имён (namespace/package) знакомо java и c# программистам, теперь доступно и в php. Нужно оно для того, что-бы не писать длинные перефиксы к названиям классов, как сейчас делается в Zend, PEAR и других библиотеках и платформах для совместимости.

Вместо этого классы, функции, интерфейсы (абстрактные классы) и константы могут быть объединены в одно пространство имён. Глобальные переменные в это пространство не входят.

### Простой пример

Определяется пространство ключевым словом namespace

`//определяем класс в пространстве   namespace MyCMS::Core;   class System{}`

Использование этого класса в третьих библиотеках осуществляется ключевым словом use

`require_once('mycms/core.php');   use MyCMS::Core::System; //импортируем только заданный класс   $objSystem=new System;`

Как вы уже догадались, разделитель :: работает так же как и вызов статических методов, разделяя уровень пространства имён и конкретный класс. Уровень вложённости пространств можно использовать наряду с модульностью библиотеки, например реализовать пространства Database::MySQL::Adapter и Database::Oracle::Adapter.

### Новые возможности и новые проблемы

Если в пространстве имён имя класса перезаписывает ранее объявленный глобальный класс или функцию, то к нему по прежнему можно обратится через ::SomeClassName, однако не зная к какой именно реализации программист обращается может вызвать проблемы. Например можно переобъявить стандартные php функции, поменять sin() и cos() местами, что-бы кому-то жизнь мёдом не казалась.

Для отладки существует рабочая константа __NAMESPACE__.

С двоеточием возникает и проблема неоднозначности:

`A::B() // вызов функции B из namespace A   A::B() // вызов статичного метода B у класса A`

Читайте по теме:

- [Using php namespaces](http://www.phpfever.com/using-php-namespaces.html)
- [PHPклуб о доступности в версии 5.3](http://phpclub.ru/talk/showthread.php?threadid=103418&perpage=20&pagenumber=1)

## Related

- [CSV - кодировки, импорт и экспорт](/ru/blog/tech/backend/php/csv-kodirovki-import-i-eksport/)
- [Drupal 7](/ru/blog/tech/backend/php/drupal-7/)
- [Mysql import - export](/ru/blog/tech/backend/DB/mysql/mysql-import-export/)
