编辑:编辑标题以使其更有用。最初我不知道使用共享单词导致问题。
这是非常基本但相当神秘。
我有两个班级:
class Hello
{
public function hello()
{
echo "Hello";
}
}
和
class World
{
public function world()
{
echo " World";
}
}
通过
调用include_once 'classes/Hello.php';
include_once 'classes/world.php';
$hi= new Hello;
$wd= new World;`
结果Hello World
我最初意外地使用hello
作为班级World
方法的名称。
结果Hello
,即没有World
。
问题1
为什么这些方法会被解雇?我已经实例化了两个对象,但没有请求该方法“触发”。我以为我必须这样做:
$hi->hello();
获得输出。
问题2
我更加神秘的是,如果两个函数都被称为hello,我只会得到Hello。
当然
$hi= new Hello;
$wd= new World;
实例化两个完全独立的对象。那么方法的实际NAME如何影响任何东西呢?
我还有很长的路要走,但这让我很困惑。
答案 0 :(得分:9)
当您创建此类的新实例时,会调用这两个方法,因为这些方法与类本身具有相同的名称,因此它们是此类的constructor:
class Hello { public function hello() { echo "Hello"; } }
class World { public function world() { echo " World"; } }
因此,当您从两个类中获取实例时,两个构造函数都被调用。
现在,当您将两个方法重命名为hello
时,只有1个方法被计为构造函数,另一个方法是另一个类中的常规方法。这就是为什么你只看到Hello
作为输出的原因。
但是不要使用类的名称作为构造函数! It will be deprecated in PHP 7.使用__construct()
。