Этот ответ сфокусирован на ответе @deceze.
Его аргумент в том, что иметь два класса с разными именами сложнее.Это так?
1.) Его пример кода не работает, потому что он никогда не включал файлы.Так что это должно выглядеть так:
namespace Db\Mysql;
use Http\Curl\Adapter as HAdapter;
include('Db/Mysql/Adapter.php');
include('Http/Curl/Adapter.php');
Adapter::foo(); // Mysql adapter
HAdapter::foo(); // Http adapter, same as:
\Http\Curl\Adapter::foo();
2.) Вы не можете включать файлы adapter.php
, если вы не добавляете определение пространства имен в эти файлы:
<?php
// this is Db/Mysql/Adapter.php
namespace Db/Mysql;
class Adapter {
static function foo() {
}
}
?>
А теперь вариант без пространства имен:
include('db/mysql/adapter.php');
include('http/curl/adapter.php');
MysqlAdapter::foo(); // Mysql adapter
CurlAdapter::foo(); // Http adapter
A adapter.php
должен выглядеть следующим образом:
<?php
// this is Db/Mysql/Adapter.php
class MysqlAdapter {
static function foo() {
}
}
?>
Наконец вам нужно отредактировать столько же файлов, сколько и раньше, добавив большекод, как и раньше.Так что это не может быть аргументом.
Единственный аргумент, который может существовать, это то, что вы избегаете проблем с конфликтующими сторонними библиотеками .Но сколько конфликтов имен у вас было в прошлом?А сколько библиотек вы знаете, которые используют пространства имен, чтобы вам не нужно было редактировать все файлы?
Дело в том, что в реальном мире нет никакой пользы.Это что-то перенятое из мира Си, которое, на мой взгляд, добавляет больше запутанности, чем пользы.