• __call()和__callStatic()方法


    __call()
       当对象访问不存在的方法时,__call()方法会被自动调用
    __callStatic()
       当对象访问不存在的静态方法时,__callStatic()方法会被自动调用

    这两个方法在PHP里面也叫方法的重载(overloading)
       注意区分重写(overwrite)
       通过这两个方法,同一个方法的名称的调用可以对应不同的方法实现

     1 <?php
     2 class MagicTest{
     3     //方法重载
     4     //这个方法的参数第一个就是调用的方法的名称,
     5     //第二个参数是方法调用的参数组成的数组
     6     public function __call($name,$arguments) {
     7         echo " Calling ".$name." whith parameters:".implode(", ",$arguments);
     8     }
     9 }
    10 
    11 $obj = new MagicTest();
    12 $obj->runTest("para1","para2");

    输出: Calling runTest whith parameters:para1, para2 

     MagicTest() 是不存在 runTest() 函数的,这时自动调用 __call() 函数

    1 <?php
    2 class MagicTest{
    3     public static function __callStatic($name,$arguments) {
    4         echo "Static Calling ".$name." whith parameters:".implode(", ",$arguments);
    5     }
    6 }
    7 
    8 $obj = new MagicTest();
    9 MagicTest::runTest("para1","para2");

    还有值得说的一点就是,两个函数可以同时出现

     1 <?php
     2 class MagicTest{
     3     public function __call($name,$arguments) {
     4         echo " Calling ".$name." whith parameters:".implode(", ",$arguments)."<br/>";
     5     }
     6     public static function __callStatic($name,$arguments) {
     7         echo "Static Calling ".$name." whith parameters:".implode(", ",$arguments);
     8     }
     9 }
    10 
    11 $obj = new MagicTest();
    12 $obj->runTest("para1","para2");
    13 MagicTest::runTest("para1","para2");

    输出:

    Calling runTest whith parameters:para1, para2
    Static Calling runTest whith parameters:para1, para2

    正常时候是不允许同时出现两个相同的名称的( runTest ),

    但在面向对象的魔术方法中却可以。

  • 相关阅读:
    做项目时写的数据库操作类。SqlHelper.cs(三)
    写的登录三层结构demo(工厂模式)
    在GridView中进行排序
    微信小程序 POST请求
    mysql replace into用法详细说明
    ThinkPHP Where 条件中使用表达式
    Google发转码工具 可将安卓程序转至iOS
    IOS笔记 本地化多语言支持
    persits.jpeg 水印组件
    PHP 数组操作
  • 原文地址:https://www.cnblogs.com/jacson/p/4620728.html
Copyright © 2020-2023  润新知