Можно ли иметь два класса с одинаковыми именами, если они находятся в разных папках?

Мне было интересно, если что-то не так с двумя классами с одинаковыми именами в 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, где вы можете помещать классы с одинаковыми именами в разные пакеты и указывать пакет, чтобы различать их при реализации...

Другие вопросы по тегам