php - 为什么会自动调用与类同名的方法?

标签 php oop object

编辑:编辑标题以使其更有用。最初我不知道是使用共享词导致了问题。

这是非常基本但相当神秘的。

我有两个类:

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/

相关文章:

java - Android Studio 错误 org.apache.http.conn.HttpHostConnectException : Connection to http://10. 0.2.2:8080 拒绝

php - 如何上传 csv 文件并更新 mysql 数据库?

c++ - 如何将一个类的成员函数用作另一个类的友元函数?

java - 在 arrayList 中查找特定对象

javascript - 如何获取对象中对象内的数字值

php - 在表单发布完成在目标上执行文件上传后从 iframe 获取数据

javascript - 哪种方式加载 JSON 到 AngularJS 更好?

java - 为什么新实例使用旧实例的记录器?

oop - 策略模式是否违反单一职责原则?

c++ - 具有标识号和连接的对象 vector