欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  神坛PHP

PHP中面向对象之魔术方法(__tostring,__invoke)详解

程序员文章站 2022-01-28 21:54:17
...

__tostring():

总结:

1、在类中魔术方法__tostring方法的定义,定义格式如下public function __tostring(),注意是2个下划线,不是一个

2、当对象被当做String使用时,这个方法会被自动调用

-比如我们一般输出字符串,是用echo "你好",所以如果我们希望把一个对象当做String来使用,我们也可以直接这样写echo $obj,那此时,这个这行代码会触发这个__tostring魔术方法的执行

<?php

class Animal{

    public $name = "";

    public function __construct($name){

        $this->name = $name;

    }

    public function eat(){ }

    public function sleep(){ }

    //魔术方法 注意这里改成了一个下划线

    public function _tostring(){

        return "自动执行了Animal类中的__tostring方法<br/>";

    }

}

$monkey = new Animal("猴子");

echo $monkey;

?>



__invoke():

总结:

1、类中__invoke魔术方法的定义如下:public function __invoke()其实和普通函数一样的定义,就是名称必须是__invoke

2、当对象被当做方法使用时,这个方法会被自动调用

-比如我们一般调用方法是怎么调用的,是直接方法名(),比如smile()这样,所以当我们希望把一个对象当成方法使用时,应该怎么做呢?其实就是直接$obj(里面可以写参数),这样的形式就是方法调用的形式对吧,那么,一旦我们这样写$obj(参数),那么这个类中的__invoke()的魔术方法也会被自动的调用


<?php

class Animal{

    public $name = "";

    public function __construct($name){

        $this->name = $name;

    }

    public function eat(){ }

    public function sleep(){}

    //魔术方法

    public function __invoke(){

        echo "自动执行了Animal类中的__invoke方法<br/>";

    }

}

$monkey = new Animal("猴子");

$monkey();

?>


相关标签: 魔术 方法