Можно ли иметь два класса с одинаковыми именами, если они находятся в разных папках? - PullRequest
7 голосов
/ 13 апреля 2011

Мне было интересно, если что-то не так с двумя классами с одинаковыми именами в PHP, если они находятся в разных подпапках?

- Кроме очевидного «человеческого фактора» неправильного редактирования неверного файла.

@ admin: Я искал другие посты, связанные с этим, здесь и в других местах в Интернете, но не нашел ни одного, который ответил бы на этот конкретный вопрос.

@ всем: однако я нашел ( php - классы автозагрузки из разных папок ) очень полезными, и на самом деле это решило один из моих других вопросов !

Ответы [ 7 ]

8 голосов
/ 13 апреля 2011

Возможно иметь классы с одинаковыми именами даже в одной папке.

Но убедитесь, что вы загружали только один класс в PHP-скрипте за раз.

Они не могут бытьзагружается в один и тот же скрипт одновременно.

PHP не знает, если вы создали два класса с одинаковыми именами, но факт в том, что PHP не будет загружать их в одном и том же скрипте.Вы можете использовать один класс за раз.

Вы также можете посмотреть пространства имен в php.

6 голосов
/ 13 апреля 2011

Вот где появляются пространства имен. http://www.php.net/manual/en/language.namespaces.rationale.php http://www.php.net/manual/en/language.namespaces.basics.php

Это позволяет различать два класса с одинаковым именем.

1 голос
/ 13 апреля 2011

Конечно, вы можете создавать файлы в одной и той же папке или в разных папках с одинаковыми именами классов, но вы можете использовать только одну реализацию в одном файле.

Если вам действительно нужно дать двум классам одно и то же имя и использовать их в одном файле, решением могут быть пространства имен ... http://www.php.net/manual/en/language.namespaces.rationale.php

0 голосов
/ 09 июля 2019

Это позволяет иметь классы с одинаковыми именами даже в одной папке.Вот пример кода.

имя файла: 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();
?>
0 голосов
/ 13 апреля 2011

«Человеческий фактор» - это точка.
Не только редактирование неправильной проблемы с файлом, но и работа с этими классами в одном и том же коде - это полный беспорядок.

0 голосов
/ 13 апреля 2011

На самом деле вы можете, но подумайте также о перегрузке и об интерфейсах ...

0 голосов
/ 13 апреля 2011

Я полагаю, что у вас будет конфликт, когда вы будете создавать экземпляры этих классов.На самом деле я никогда не проверял это, но PHP не ведет себя как Java, где вы можете помещать классы с одинаковыми именами в разные пакеты и указывать пакет, чтобы различать их при создании ...

...