PHP面向对象之魔术方法(__tostring,__invoke)详解-php教程

资源魔 30 0

本文指标:

一、理解PHP中魔术办法的界说

二、理解__tostring()魔术办法的应用场景

三、把握__tostring()魔术办法的用法

四、理解__invoke()魔术办法的应用场景

五、把握__invoke()魔术办法的用法

(一)、理解PHP中魔术办法的界说

PHP 将一切以 __(两个下划线)扫尾的类办法保存为魔术办法。以是正在界说类办法时,除了了上述魔术办法,倡议没有要以 __ 为前缀。

(二)、理解__tostring()的魔术办法的应用场景

当咱们有需求将一个工具转换成字符串,咱们能够正在类中界说__tostring办法,而后正在外面写咱们的自界说逻辑

(三)、把握__tostring()的魔术办法的用法

总结:

一、正在类中魔术办法__tostring办法的界说,界说格局以下public function __tostring(),留意是2个下划线,没有是一个

二、当工具被当作String应用时,这个办法会被主动挪用

-比方咱们普通输入字符串,是用echo "你好",以是假如咱们心愿把一个工具当作String来应用,咱们也能够间接这样写echo $obj,那此时,这个这行代码会触发这个__tostring魔术办法的执行

每一个总结都是经过理论患上进去的,如今咱们用理论来演示总结,这样能够促成了解,让每一个总结了解起来愈加明晰,直观

案例1、

理论指标:

一、正在类中,魔术办法__tostring办法的界说,界说格局以下public function __tostring(),留意是2个下划线,没有是一个

详细代码以下:

<?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("山公");
?>

案例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;
?>

运转后果为:

主动执行了Animal类中的__tostring办法

咱们发现其实咱们不手动的去挪用__tostring办法,也就是说不写成$monkey->__tostring(),然而这个办法仍然执行了,由于甚么呢?由于咱们写了echo $monkey,以是相称于咱们把$monkey工具当成为了字符串来应用了,而后这个类中又界说了这个魔术办法,以是它就像魔术同样,忽然就被主动执行了

这里肯定要留意,是2个下划线,没有是一个,不然就没有是魔术办法了,上面仍是再来做下测试

详细代码以下:

<?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;
?>

运转后果为:

Catchable fatal error: Object of class Animal could not be converted to string in D:\E-class\class-code\classing\index.php on line 19

以是此刻就会报错了,由于不__tostring的魔术办法了,以是肯定要留意是2个下划线,就如同结构函数以及析构函数同样,都是两个下划线

(四)、理解__invoke()魔术办法的应用场景

当咱们有需求将一个工具间接当成办法应用时,咱们能够正在类中界说__invoke办法,而后正在外面写咱们的自界说逻辑

(五)、把握__invoke()的魔术办法的用法

总结:

一、类中__invoke魔术办法的界说以下:public function __invoke()其实以及一般函数同样的界说,就是称号必需是__invoke

二、当工具被当作办法应用时,这个办法会被主动挪用

-比方咱们普通挪用办法是怎样挪用的,是间接办法名(),比方smile()这样,以是当咱们心愿把一个工具当成办法应用时,应该怎样做呢?其实就是间接$obj(外面能够写参数),这样的方式就是办法挪用的方式对吧,那末,一旦咱们这样写$obj(参数),那末这个类中的__invoke()的魔术办法也会被主动的挪用

每一个总结都是经过理论患上进去的,如今咱们用理论来演示总结,这样能够促成了解,让每一个总结了解起来愈加明晰,直观

详细代码:

案例1、

理论指标:

一、类中__invoke魔术办法的界说以下:public function __invoke()其实以及一般函数同样的界说,就是称号必需是__invoke

详细代码以下:

<?php
class Animal{
    public $name = "";
    public function __construct($name){
        $this->name = $name;
    }
    public function eat(){

    }
    public function sleep(){

    }
    //魔术办法
    public function __invoke(){
        return "主动执行了Animal类中的__invoke办法<br/>";
    }
}
$monkey = new Animal("山公");

?>

案例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();

?>

运转后果以下:

主动执行了Animal类中的__invoke办法

咱们发现其实咱们不手动的去挪用__invoke办法,也就是说不写成$monkey->__invoke(),然而这个办法仍然执行了,由于甚么呢?由于咱们写了$monkey(),以是相称于咱们把$monkey工具当成办法来应用了,而后这个类中又界说了这个魔术办法,以是它就像魔术同样,忽然就被主动执行了

这里肯定要留意,是2个下划线,没有是一个,不然就没有是魔术办法了,上面仍是再来做下测试

<?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();

?>

运转后果以下:

Fatal error: Uncaught Error: Function name must be a string in D:\E-class\class-code\classing\index.php:19 Stack trace: #0 {main} thrown in D:\E-class\class-code\classing\index.php on line 19

以是肯定要留意是2个下划线,没有是一个,不然就没有是魔术办法了

总结:

一、本文次要是解说了2个魔术办法,__tostring,__invoke,并详细讲了他们的详细完成形式以及应用场景

心愿本文能给各人带来肯定的协助,谢谢!!!

以上就是PHP面向工具之魔术办法(__tostring,__invoke)详解的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 面向对象

抱歉,评论功能暂时关闭!