php7:魔术方法__call与__callStatic(内包含AST)

注:博客参考https://www.cnblogs.com/TigerYangWTH/p/5907191.html, 本博客纯属个人观点,有错误欢迎纠正首先我谈一下魔术方法,魔术方法就是一些用于特定功能、php自带的方法,在某些条件满足的情况下魔术方法就会被调用以处理问题。于是谈魔术方法就离不开两个方面:触发时机功能__call与__callStatic魔术方法__call:触发时机:分为类外调用和类内调用两种情况。当在类内部调用不存在的方法时,无论时对象还是类本身调用都会触发__cal
摘要由CSDN通过智能技术生成

注:博客参考https://www.cnblogs.com/TigerYangWTH/p/5907191.html, 本博客纯属个人观点,有错误欢迎纠正
首先我谈一下魔术方法,魔术方法就是一些用于特定功能、php自带的方法,在某些条件满足的情况下魔术方法就会被调用以处理问题。
于是谈魔术方法就离不开两个方面:

  • 触发时机
  • 功能

__call与__callStatic魔术方法

__call:

  • 触发时机:分为类外调用和类内调用两种情况。当在类内部调用不存在的方法时,无论时对象还是类本身调用都会触发__call方法;在类外部情况下只有使用对象调用不存在的方法会调用__call方法
  • 功能:看一下__call原型,__call($name, $arguments), 参数name表示的是调用的方法名,arguments为参数数组。在实际中,调用不存在的方法基本都会使用该函数来处理,这种处理大部分就是重载,针对不同的情况根据方法名和参数调用不同的函数。php7中使用AST可以使用匿名函数直接调用

__callStatic:

  • 触发时机:只有一种情况,那就是在类外部使用类名调用不存在的静态方法
  • 功能:与__call类似

实例:
以下实例参考上面网址的内容:

<?php

//魔术方法__call与__callStatic的区别,调用时机


class Intro
{
   
    public function test()
    {
   
        echo 'in<br />';
        static::who();
        echo ' 1 ';
        Intro::who();
        echo ' 2 ';
        self::who();
        echo ' 3 ';
        $this->who();
        echo ' 4 ';
        echo 'out<br />';
    }

    /**
     *私有方法
     */
    private function test2()
    {
   

    }

    public static function __callStatic($a, $b) //类外部调用不存在的静态方法
    {
   
        var_dump('A static');
    }

    public function __call($a, $b)  //类内部调用不存在的方法会调用__call魔术方法,$a为方法名,$b为参数,可以通过__call来实现重载
    {
   
        var_dump('A call');
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值