Можно ли иметь два класса с одинаковыми именами, если они находятся в разных папках?
Мне было интересно, если что-то не так с двумя классами с одинаковыми именами в PHP, если они находятся в разных подпапках?
- Кроме очевидного "человеческого фактора" - неправильного редактирования неправильного файла.
@admin: я искал другие посты, связанные с этим, здесь и в других местах в Интернете, но не нашел ни одного, который ответил бы на этот конкретный вопрос.
@everyone: Тем не менее, я нашел это ( php - классы автозагрузки из разных папок) очень полезным, и на самом деле это решило один из моих других вопросов!
8 ответов
Это позволяет иметь классы с одинаковыми именами даже в одной папке.
Но убедитесь, что вы загружали только один класс в PHP-скрипте за раз.
Они не могут быть загружены в один и тот же скрипт одновременно.
PHP не знает, если вы создали два класса с одинаковыми именами, но дело в том, что PHP не загрузит их в один и тот же скрипт. Вы можете использовать один класс за раз.
Вы также можете посмотреть на пространства имен в php.
Вот где появляются пространства имен. http://www.php.net/manual/en/language.namespaces.rationale.php http://www.php.net/manual/en/language.namespaces.basics.php
Это позволяет различать два класса с одинаковыми именами.
Вы можете использовать PHP Aliasing:(PHP 5 >= 5.3.0, PHP 7, PHP 8)
use App\Company;
use App\Domain\Company\Models\Company as Tcompany;
https://www.php.net/manual/en/language.namespaces.importing.php
Это возможно, чтобы классы с одинаковыми именами находились даже в одной папке. Вот образец кода.
имя файла: namespace.php
<?php
namespace MyProject {
class Connection {
public function __construct(){
echo 'My Project class call';
}
}
function connect() {
echo 'My Project connect function.';
}
}
namespace AnotherProject {
class Connection {
public function __construct(){
echo 'Another Project class call';
}
}
function connect() {
echo 'Another Project connect function.';
}
}
?>
Другой файл, в котором мы используем это пространство имен. имя файла: myapp.php
<?php
require 'namespace.php';
//create a class object
$obj = new MyProject\Connection;
//calling a function
MyProject\connect();
//calling a another function
AnotherProject\connect();
?>
Конечно, вы можете создавать файлы в одной и той же папке или в разных папках с одинаковыми именами классов, но вы можете использовать только одну реализацию в одном файле.
Если вам действительно нужно дать двум классам одно и то же имя и использовать их в одном файле, решением могут быть пространства имен... http://www.php.net/manual/en/language.namespaces.rationale.php
На самом деле вы можете, но подумайте также о перегрузке и об интерфейсах...
"Человеческий фактор" это точка.
Не только редактирование неправильной проблемы файла, но также и работа с этими классами в одном и том же коде будет полным беспорядком
Я верю, что у вас будет конфликт, когда вы будете создавать эти классы. На самом деле я никогда не проверял это, но PHP не ведет себя как Java, где вы можете помещать классы с одинаковыми именами в разные пакеты и указывать пакет, чтобы различать их при реализации...