首页 > 后端开发 > 正文

如何实现thinkphp中Db类的方法调用风格?

2024-09-08 21:50:19 | 我爱编程网

今天我爱编程网小编整理了如何实现thinkphp中Db类的方法调用风格?相关内容,希望能帮助到大家,一起来看下吧。

本文目录一览:

如何实现thinkphp中Db类的方法调用风格?

PHP中的__construuct()函数中的return的意义?

构造函数 __construct()是为了构造一个对象实例,在函数中进行return是完全没有意义的,PHP会忽略其中的return语句。因此,带有return的构造函数是不规范的代码,不要去学习。

如何实现thinkphp中Db类的方法调用风格?

如何实现thinkphp中Db类的方法调用风格?

我们先来看下官网对listen的说明:如果开启数据库的调试模式的话,你可以对数据库执行的任何SQL操作进行监听。这无疑很方便我们进行增删改查的调试,以及通过执行的时间进行有效的sql优化,

友情提示:数据库监听要写在执行sql语句的前面,因为只有在调用Db::listen之后的SQL语句才会被监听,调用之前的语句不会被监听。至于为什么我们后面讲!

使用如下方法:

123456 Db::listen(function($sql, $time, $explain){    // 记录SQL    echo $sql. ' ['.$time.'s]';    // 查看性能分析结果    dump($explain);});

有很多小伙伴疑问该方法应该放在哪里?使用之后为什么没有效果,很可能就是提示上所说的那样了,那么接下来我们简单分析一下这个方法!

1、从Db::listen(),可以看出listen是Db中的一个静态方法,那么我们就去找db类

2、从Db类中没有找到该方法,但是我们从use think\db\Connection可以看出,引入了Connection类,我们在这个类找一下这个方法!

12345678910 /** * 监听SQL执行 * @access public * @param callable $callback 回调方法 * @return void */public function listen($callback){    self::$event[] = $callback;}

3、event 保存我们传入的回调方法

4、在看下面这2个方法

12345678910111213141516171819202122232425262728293031323334353637383940414243444546 /** * 数据库调试 记录当前SQL及分析性能 * @access protected * @param boolean $start 调试开始标记 true 开始 false 结束 * @param string  $sql 执行的SQL语句 留空自动获取 * @return void */protected function debug($start, $sql = ''){    if (!empty($this->config['debug'])) {        // 开启数据库调试模式        if ($start) {            Debug::remark('queryStartTime', 'time');        } else {            // 记录操作结束时间            Debug::remark('queryEndTime', 'time');            $runtime = Debug::getRangeTime('queryStartTime', 'queryEndTime');            $sql     = $sql ?: $this->getLastsql();            $log     = $sql . ' [ RunTime:' . $runtime . 's ]';            $result  = [];            // SQL性能分析            if ($this->config['sql_explain'] && 0 === stripos(trim($sql), 'select')) {                $result = $this->getExplain($sql);            }            // SQL监听            $this->trigger($sql, $runtime, $result);        }    }} protected function trigger($sql, $runtime, $explain = []){    if (!empty(self::$event)) {        foreach (self::$event as $callback) {            if (is_callable($callback)) {                call_user_func_array($callback, [$sql, $runtime, $explain]);            }        }    } else {        // 未注册监听则记录到日志中        Log::record('[ SQL ] ' . $sql . ' [ RunTime:' . $runtime . 's ]', 'sql');        if (!empty($explain)) {            Log::record('[ EXPLAIN : ' . var_export($explain, true) . ' ]', 'sql');        }    }}

5、当我们执行了sql语句,就会触发会调用debug方法将执行日志写入日志文件中,同事调用trigger方法,如果我们最开始已经传入了回调方法,也就是

1 self::$event

不为空,(说明我们在执行sql语句之前就已经设置了监听)我们将调用我们的回调函数!

1 call_user_func_array

总结:在执行sql语句之前我们需要先设置监听,这就是为什么要把Db::listen()写在执行sql语句的前面!

下面我们来看下实际的效果:

1234567891011121314 public function expo(){    Db::listen(function($sql, $time, $explain){        // 记录SQL        echo $sql. ' ['.$time.'s]';        // 查看性能分析结果        dump($explain);    });    //Get data based on columns,执行sql语句    foreach($channel as $v)        $list[$v['id']] =  GetData::getData('news',"channel_id = {$v['id']} and status = 2",'id,title,author,create_time,channel_id,file_path','order_by desc','0,5');    return view('expo',[        'list' => $list    ]);}

效果图:

如何实现thinkphp中Db类的方法调用风格?

jQuery 里的$.post()是什么函数?

我爱编程网(https://www.52biancheng.com)小编还为大家带来jQuery 里的$.post()是什么函数?的相关内容。

$.post()是jquery一个简单的 POST 请求功能以取代复杂 $.ajax .

第一个"php/folders.php"url,{fun:"addDir", dirname:dirname, newDirname:newDirname, fetchDir:dirname}是data也就是你要传的参数,function(res)是 回调函数 。

扩展资料:

jquery中$.post()方法的简单实例

在jqery中有这样一个方法,$.post()下面就这个方法做一个简单的实例:

jQuery.post( url, [data], [callback], [type] ) :
使用POST方式来进行异步请求

参数:

url (String) : 发送请求的URL地址.

data (Map) : (可选) 要发送给服务器的数据,以 Key/value 的键值对形式表示。

callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。

type (String) : (可选)官方的说明是:Type of data to be sent。其实应该为客户端请求的类型(JSON,XML,等等) 我爱编程网

1.html页面(index.html)

以上就是如何实现thinkphp中Db类的方法调用风格?全部内容,更多相关信息,敬请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“如何实现thinkphp中Db类的方法调用风格?”相关推荐
怎么实现javascript中调用java类中的方法
怎么实现javascript中调用java类中的方法

怎么实现javascript中调用java类中的方法实现javascript中调用java类中的方法如下:只要调用addJavascriptInterface方法即可映射一个Java对象到JavaScript对象上。1、映射Java对象到JavaScript对象上代码如下:mWebView=(WebView)findViewById(R.id.wv_content);mW

2024-03-21 08:15:37
如何使用thinkPHP来调用自己写的类呢?
如何使用thinkPHP来调用自己写的类呢?

PHP标准连接自定义函数封装及调用functionbb($state){switch($state){case"开启":$res=aa('喜洋洋');//print_r($res);break;default:echo"你好!";break;}}如何使用thinkPHP来调用自己写的类呢?可以用import函数.例如,你可以把phpMaile

2024-07-21 23:47:40
thinkphp用递归怎么实现无限分类
thinkphp用递归怎么实现无限分类

thinkphp用递归怎么实现无限分类递归函数即为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白。思路:先建立对应的数据库和表:请注意pid和id的外键关联关系,最顶级的pid为0。class Tree{

2024-07-13 11:23:44
PHP中,参数调用相应函数是如何实现的?
PHP中,参数调用相应函数是如何实现的?

PHP直接调用函数和调用另外一个文件中的函数的区别//如果是PHP文件中的函数,唯一的区别是:先引入外部文件,然后直接调用。//如果是外部类文件中的函数,需要引入,然后new 对象后,再调用该对象的函数。$msg=test_msg();function test_msg(){echo "";}//调用外部文件中的函数//首先引入文件include_once 'file.php';$msg=t

2024-07-13 21:50:55
PHP怎么调用其他类的方法
PHP怎么调用其他类的方法

php"直接用类名"和"new实例化"调用函数哪种方法效率更高?1.首先用法不同,__new__()用于创建实例,所以该方法是在实例创建之前被调用,它是类级别的方法,是个静态方法;而__init__()用于初始化实例,所以该方法是在实例对象创建后被调用,它是实例级别的方法,用于设置对象属性的一些初始值。由此可知,__new__()在__init__()之前被调用。如果__new_

2024-07-19 01:34:22
如何在主函数中调用类中的成员函数调用
如何在主函数中调用类中的成员函数调用

如何在主函数中调用类中的成员函数调用主函数中调用类中的成员函数调用方式为:对象名.成员函数名(参数列表)。其中“.”是成员运算符,用来对成员进行限定,指明所访问的是哪一个对象中的成员。不仅可以在类外引用对象的公用数据成员,而且还可以调用对象的公用成员函数,但同样必须指出对象名,如:stud1.display();//正确,调用对象stud1的公用成员函数。displ

2024-10-26 18:56:23
PHP 静态方法怎么调用父类非静态方法
PHP 静态方法怎么调用父类非静态方法

php直接用类名调用静态方法会不会触发类的构造函数调用静态方法与触发类的构造函数没有必然关系。但是静态方法可以实例化类本身,这时候会触发构造函数,而且可以传参数。如:class classname{    private function __construct($a){        $this->a = $a;        exit($this->a);//打印一下    

2024-07-24 18:21:44
PHP中使用cURL实现Get和Post请求的方法~呢?
PHP中使用cURL实现Get和Post请求的方法~呢?

PHPcurl_init简介在PHP编程中,curl_init()函数扮演着关键的角色,它用于(版本要求:PHP4从4.0.2开始)[1]初始化一个CURL会话。这个函数的主要作用是创建一个新的CURL操作环境,生成一个CURL句柄,这个句柄将在后续的curl_setopt(),curl_exec(),以及curl_close()等函数中被调用。当你调用curl_init()时,如果没

2024-12-06 12:05:54