编辑:编辑标题以使其更有用。最初我不知道是使用共享词导致了问题。
这是非常基本但相当神秘的。
我有两个类:
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
。
问题一
为什么方法会触发?我已经实例化了两个对象,但没有请求方法“fire”。我以为我必须做类似的事情:
$hi->hello();
获取输出。
问题二
我更困惑的是,只有当两个函数都被调用时我才会得到 Hello。
当然
$hi= new Hello;
$wd= new World;
实例化两个完全独立的对象。那么方法的实际 NAME 有什么影响呢?
我还有很长的路要走,但这让我很困惑。
最佳答案
当您创建此类的新实例时,这两个方法都会被调用,因为这些方法与类本身同名,因此它们是 constructor。这个类的:
class Hello { public function hello() { echo "Hello"; } }
class World { public function world() { echo " World"; } }
所以当你从两个类中获取一个实例时,两个构造函数都会被调用。
现在,当您将两个方法重命名为 hello
时,只有一个方法被算作构造函数,另一个是另一个类中的普通方法。这就是为什么您只看到 Hello
作为输出。
但是不要使用类名作为构造函数! It will be deprecated in PHP 7.使用 __construct()
。
关于php - 为什么会自动调用与类同名的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32171754/