• 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函数如何使用

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了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好友复制网址打印

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

相关文章

  • 2022-04-29详解thinkPHP5模型中的修改器和自动完成
  • 2022-04-29Photoshop制作绿色风格金属立体字教程
  • 2022-04-29一分钟学会PHP中关于封装验证码(上)
  • 2022-04-29MySQL数据库的root密码忘记该怎么办
  • 2022-04-29Photoshop制作漂亮糖果文字效果
  • 2022-04-29分享一个Golang Http 验证码示例
  • 2022-04-29一张图搞定如何在PhpStorm中修改类文件头部作者
  • 2022-04-29uni-app小程序录音上传的解决方案
  • 2022-04-29关于24小时快速排名SEO优化关键词排名前三的猫腻
  • 2022-04-29DEDECMS用函数实现隔行换色以及分组加线

文章分类

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

最近更新的内容

    • PS制作质感的立体字
    • WordPress 5.0 如何换回原有”Classic Editor”编辑器?
    • 详解Bootstrap中的手风琴效果
    • 给DEDECMS后台加上批量修改tags功能
    • 讲解Laravel8.5是如何添加验证码mews/captcha的
    • Photoshop简单的绘制逼真的小汽车教程
    • 怎么检查看到mysql的用户名和密码
    • Photoshop制作逼真复古效果的黑胶唱片
    • IllustratorUI设计教程:解析多重填充与多重描边
    • 详解JS,Jquery获取屏幕的宽度和高度代码

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

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