• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > PHP中的__callStatic函数如何使用

PHP中的__callStatic函数如何使用

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了callStatic函数等相关知识,希望对您有所帮助

这种情况在larave中尤其常见,但是开发过程中很明显这些有一部分不是静态的,比如你使用一个模型User,那么你每次实例化出来他都是一个全新的,互不影响,这里就用到了一个魔术方法__callStatic。


PHP中的__callStatic函数如何使用


举个栗子:

<?phpclass Test{    public function __call($name, $arguments)    {        echo 'this is __call'. PHP_EOL;    }     public static function __callStatic($name, $arguments)    {        echo 'this is __callStatic:'. PHP_EOL;    }} $test = new Test();$test->hello();$test::hi();//this is __call:hello//this is __callStatic:hi

当然魔术方法也是很耗性能的一种方式,每次调用的时候后回先扫一遍class没找到方法时才会调用它,而为了代码的整洁和抽象这个方法也能给很大的帮助,在这之间去要有个权衡

下面实现的 log 类,采用的就是这种方法,将方法解耦出来,只要符合规定的接口就能调用

<?php class Test{    //获取 logger 的实体    private static $logger;     public static function getLogger(){        return self::$logger?: self::$logger = self::createLogger();    }     private static function createLogger(){        return new Logger();    }     public static function setLogger(LoggerInterface $logger){        self::$logger = $logger;    }      public function __call($name, $arguments)    {        call_user_func_array([self::getLogger(),$name],$arguments);    }     public static function __callStatic($name, $arguments)    {        forward_static_call_array([self::getLogger(),$name],$arguments);    }} interface LoggerInterface{    function info($message,array $content = []);    function alert($messge,array $content = []);} class Logger implements LoggerInterface {    function info($message, array $content = [])    {        echo 'this is Log method info' . PHP_EOL;        var_dump($content);    }     function alert($messge, array $content = [])    {        echo 'this is Log method alert: '. $messge . PHP_EOL;    }}  Test::info('喊个口号:',['好好','学习','天天','向上']);$test = new Test();$test->alert('hello');

输出:

this is Log method infoarray(4) {  [0]=>  string(6) "好好"  [1]=>  string(6) "学习"  [2]=>  string(6) "天天"  [3]=>  string(6) "向上"}this is Log method alert: hello


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 分享一个Laravel建议写法指南
  • Illustrator制作超有质感立体矢量LOGO
  • 手把手教你怎么在小程序中使用字体图标
  • Photoshop打造超酷光感立体文字效果
  • 帝国CMS多值字段for循环调用调用方法
  • Laravel Excel 的五个隐藏功能
  • 可以同时删除字符串前导和尾部空白的函数是什么
  • SQLSTATE[HY000]: General error: mode must be an integer
  • 实例详解通过LogMiner实现Oracle数据同步迁移
  • Laravel使用redis队列实例讲解

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 宝塔linux管理助手安装完后显示IP为内网IP怎么办
    • Node.js怎么读写json文件?方法介绍
    • Discuz搭建的论坛如何修改后台地址?
    • Laravel中三种中间件的作用
    • ThinkPHP6 Workerman 基本使用
    • Photoshop详细解析置换滤镜的工作原理
    • PS制作逼真的蕾丝花边文字效果的教程
    • 纯CSS3怎么创建瀑布流布局?columns方法浅析
    • PS打造缝线文字效果
    • 如何解决phpmyadmin打开很慢的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有