9

I was wondering if there is anything wrong with having two classes with the same name in PHP if they're in different sub folders, other than the obvious "human factor" of editing the wrong file by mistake?

I have looked for other posts relating to this, here and elsewhere on the web, but I didn't find any that could answer this specific question. I did however find this Autoload classes from different folders very helpful though, and in fact it solved one of my other questions.

kiamlaluno
  • 24,790
  • 16
  • 70
  • 85
Chris
  • 872
  • 1
  • 10
  • 20

7 Answers7

9

This is possible to have classes with same name even in same folder.

But Make sure you have loaded only one class in the PHP script at a time.

They can not be loaded in the same script at same time.

PHP does not know if you have created two classes with same name but the fact is PHP will not load them in same script. You can use one class at a time.

You can also look at namespaces in php.

Shakti Singh
  • 77,873
  • 18
  • 129
  • 147
  • Thanks I'll look into the namespace thing. And thanks to everyone else who's answered too! In my case I think it unlikely that I will need two classes with the same name, but I thought it wise to find out now rather than down the line if there's likely to be problems! – Chris Apr 13 '11 at 13:09
7

That's where namespaces come in. http://www.php.net/manual/en/language.namespaces.rationale.php http://www.php.net/manual/en/language.namespaces.basics.php

This allows you to differentiate between the two classes of the same name.

Abuh
  • 423
  • 3
  • 9
1

Of course you can create the files in the same folder or different folders with the same class names, but you can only use one implementation in one file.

If you really need to give the two classes the same name and must use them in one file, a solution might be namespaces... http://www.php.net/manual/en/language.namespaces.rationale.php

Michael Rose
  • 7,220
  • 3
  • 20
  • 26
1

This is possible to have classes with the same name even in the same folder. Here is the sample of code.

file name: 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.';
}

}
?>

Another file, where we use this namespace. file name: 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();
?>
Vaibhav Singhal
  • 502
  • 1
  • 3
  • 21
-1

I believe you will have a conflict when you'll instantiate these classes. Actually I've never tested it, but PHP does not behave like Java, where you can put classes with the same name in different packages, and specify the package to differentiate them upon instantiation...

3rgo
  • 2,863
  • 6
  • 28
  • 44
-1

In fact you can, but think also about the overloading, and about the interfaces...

elvenbyte
  • 761
  • 1
  • 16
  • 32
-2

A 'Human Factor' IS the point.
Not only editing wrong file issue but also working with these classes in the same code would be a total mess.

Your Common Sense
  • 152,517
  • 33
  • 193
  • 313
  • That's true, I've only recently started building web apps with OOPHP and MVC's and it's been a fantastic and rewarding learning curve. But the real lesson, as you allude to, is manageability for the development team. I think always using unique classnames would just be good practice if nothing else. ;) – Chris Apr 14 '11 at 12:06