魔术方法之__call与__callStatic方法

<?php
class human{
private function t(){
}

/**
     * 魔术方法__call
     *
     * @param string $method 获得方法名
     * @param string $arg 获得方法的参数集合
     */
    public function __call($method, $params){
        echo ‘你想调用我不存在的方法‘, $method, ‘方法‘;
        echo ‘还传了一个参数‘;
        print_r($params);
    }

    //魔术方法__callStatic
    public static function __callStatic($method, $params){
        echo ‘你想调用我不存在的‘, $method, ‘静态方法‘;
        echo ‘还传了一个参数‘;
        print_r($params),‘‘;
    }
}

$li=new human();
$li->say(1, 2, 3);

/*
__call是调用不可见(不存在或无权限)的方法时,自动调用
$li->say(1, 2, 3);
-----没有say()方法---->
 __call(‘say‘, array(1, 2, 3))运行
*/

human::cry(‘痛哭‘, ‘鬼哭‘, ‘号哭‘);

/*
__callStatic 是调用不可见的静态方法时,自动调用.
Human::cry(‘a‘, ‘b‘, ‘c‘);
----没有cry方法--->
Human::__callStatic(‘cry‘, array(‘a‘, ‘b‘, ‘c‘));
*/

?>

  

原文地址:https://www.cnblogs.com/qq254980080/p/9384401.html

时间: 2024-10-14 23:42:54

魔术方法之__call与__callStatic方法的相关文章

PHP魔术方法之__call与__callStatic方法

//魔术方法__call /* $method 获得方法名 $arg 获得方法的参数集合 */ class Human { private function t(){ } public function __call($method,$arg){ echo '你想调用我不存在的方法',$method,'方法<br/>'; echo '还传了一个参数<br/>'; echo print_r($arg),'<br/>'; } public static function _

php -- 魔术方法 之 调用方法:__call()、__callStatic()

方法重载:当调用一个不存在或者权限不够的方法的时候,会自动调用__call()方法 public function __call($name,$args){}  :用对象调用方法 public static function __callStatic($name,$args){}: 用类调用静态方法 $name:被调用的方法名 $args:被调用的方法的参数列表数组 <?php //PHP方法重载 class Person{ //方法 private function test(){ echo

PHP中的__call和__callStatic方法

如何防止调用不存在的方法而出错,使用__call魔术重载方法. __call方法原型如下: mixed __call(string $name,array $arguments) 当调用一个不可访问的方法(如未定义,或者不可见时), __call()就会被调用.其中$name参数是要调用的方法名称.$arguments参数是一个数组,包含者要传递给方法的参数, 如下所示: <?php class HandsonBoy { private $name = 'chenqionghe'; privat

PHP面向对象魔术方法之__call函数

l 基本介绍: (1) 当我们调了一个不可以访问的成员方法时,__call魔术方法就会被调用. (2) 不可以访问的成员方法的是指(1. 该成员方法不存在, 2. 成员方法是protected或者 private) l 需求 我们就是希望,在类的外部直接调用不可访问的成员方法(private , protected). l 案例说明 <?php header('content-type:text/html;charset=utf-8'); //__call魔术方法 class Monk{ pub

php __call 与 __callStatic

php __call 与 __callStatic php 5.3 后新增了 __call 与__callStatic 魔法方法. __call 当要调用的方法不存在或权限不足时,会自动调用__call 方法. __callStatic 当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法. __call($funcname, $arguments) __callStatic($funcname, $arguments) 参数说明: $funcname String 调用的

Entity Framework DbSet&lt;T&gt;之Include方法与IQueryable&lt;T&gt;扩展方法Include的使用

Entity Framework使用Code First方式时,实体之间已经配置好关系,根据实际情况某些情况下需要同时获取导航属性,比如获取商品的同时需要获取分类属性(导航属性),或者基于优化方面考虑等,下面来看一个例子 例子中有会员实体类(Member)与角色实体类(Role),Role与Member的关系是1:n,控制台应用程序代码如下: using System; using System.Collections.Generic; using System.Linq; using Syst

c#类的方法表的建立和方法的调用

对于方法的调用,很是令我头疼,什么静态方法,实例方法,实例虚方法,这里查了很多资料,总结如下: 这里声明,我也是菜鸟,这里只讨论方法的调用相关的技术,属于个人理解,如有错误,请指正 思路: 1 clr在加载类型的过程中方法表是怎么样构建的? 2 在程序调用方法时是怎样确定使用哪个类型的方法表的? 3 在程序调用方法时是怎样确定方法在方法表中的位置的(位于方法表的第几个方法)? 一 .方法在方法表中的排列顺序: 继承的实例虚方法.实例虚方法.构造函数.静态方法.实例方法 方法表排列原则: 1 在类

Javascript的私有变量和方法、共有变量和方法以及特权方法、构造器、静态共有属性和静态共有方法

一.私有变量:定义在函数内部的属性和方法称之为该函数的私有属性和方法        共有变量:在函数内部通过this创建的对象和方法称之为该函数的共有属性和方法 特权方法:通过this创建的既可以访问该函数的共有属性和方法,也可以访问该函数的私有属性和方法称之为特权方法 构造器:对象在创建的时候调用特权方法来初始化实例的属性,这个方法也称为构造器 /** * 类的内部私有属性.私有方法.特权方法.共有属性和共有方法以及构造器 * @param id * @param bookname * @pa

方法组转换和匿名方法

前面的文章介绍过,C# 1.0中出现委托这个核心概念,在C# 2.0中,委托得到了很大的改进.C# 2.0中委托的改进为C# 3.0中的新特性提供了铺垫,当我们了解了匿名方法后,Lambda的学习就会变得相对容易. 下面就看看C# 2.0中委托的改进. 方法组转换 在C# 1.0中,如果要创建一个委托实例,就必须同时指定委托类型和符合委托签名的方法.但是,在C# 2.0中,支持了方法组转换,也就是说我们可以从方法组到一个兼容委托类型的隐式转换.所谓"方法组"(method group)