EDIT: Title edited to make it more useful. Originally I had no idea that it was the use of a shared word that was causing the problem.
This is very basic but rather mysterious.
I have two classes:
class Hello
{
public function hello()
{
echo "Hello";
}
}
and
class World
{
public function world()
{
echo " World";
}
}
called by
include_once 'classes/Hello.php';
include_once 'classes/world.php';
$hi= new Hello;
$wd= new World;`
Result Hello World
I originally accidentally had hello
for the name of the class World
's method.
Result Hello
i.e. no World
.
Question 1
Why are the methods firing? I have instantiated two objects but have not requested that the method “fire”. I thought I would have to do something like:
$hi->hello();
to get an output.
Question 2
I am even more mystified that I only get Hello if both functions are called hello.
Surely
$hi= new Hello;
$wd= new World;
instantiates two completely separate objects. So how does the actual NAME of a method affect anything?
I have a long way to go but this really confused me.
Both methods get called, when you create a new instance of this class, because the methods have the same name as the class itself and so they are the constructor of this class:
class Hello { public function hello() { echo "Hello"; } }
class World { public function world() { echo " World"; } }
So when you took an instance from both classes, both constructors got called.
Now when you renamed both methods to hello
only 1 method was counted as constructor and the other one was a normal method in the other class. That's why you only saw Hello
as output.
But don't use the name of the class as constructor! It will be deprecated in PHP 7. Use __construct()
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With