我的编程空间,编程开发者的网络收藏夹
学习永远不晚

thinkphp(tp)中paginate方法的学习

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

thinkphp(tp)中paginate方法的学习

thinkphp(tp)中分页方法paginate的学习


学习初衷:不想用官方给的模板渲染方式,只想接受数据。
  • 官方给的模板渲染:
// 查询状态为1的用户数据 并且每页显示10条数据$list = Db::name('userhttps://blog.csdn.net/qq_45764833/article/details/')->where('statushttps://blog.csdn.net/qq_45764833/article/details/',1)->paginate(10);// 渲染模板输出return view('indexhttps://blog.csdn.net/qq_45764833/article/details/', ['listhttps://blog.csdn.net/qq_45764833/article/details/' => $list]);// 模板文件中分页输出代码如下:<div><ul>{volist name='listhttps://blog.csdn.net/qq_45764833/article/details/' id='userhttps://blog.csdn.net/qq_45764833/article/details/'}    <li> {$user.nickname}</li>{/volist}</ul></div>{$list|raw}
  • 而我只单纯想要返回的数据
// 查询状态为1的用户数据 并且每页显示10条数据$list = Db::name('userhttps://blog.csdn.net/qq_45764833/article/details/')->where('statushttps://blog.csdn.net/qq_45764833/article/details/',1)->paginate(10);// 只输出数据return $list;
  • $list return 后的格式为
// 这为官方返回的格式{"total": 2,"per_page": 10,"current_page": 1,"last_page": 1,"data": [{"id": 1,"file_id": 1,"acc_set": "A"},{"id": 2,"file_id": 1,"acc_set": "A"}]}

那么问题来了:怎么获取上图中像"total"、"data"这样的值
  先说结论:

// 取"total"值$list -> toArray()['totalhttps://blog.csdn.net/qq_45764833/article/details/']; // 返回2// 取"data"值$list -> toArray()['datahttps://blog.csdn.net/qq_45764833/article/details/']; // 返回aray数组

  如果你急着想知道怎么获取数据,读到这就可以结束了。
  如果你想知道我解决这个问题的思路,请继续往下看。

paginate

获得所有数据的思考流程

刚拿到数据的处理方式

{"total": 2,"per_page": 10,"current_page": 1,"last_page": 1,"data": [{"id": 1,"file_id": 1,"acc_set": "A"},{"id": 2,"file_id": 1,"acc_set": "A"}]}

  我想当然认为是数组,就用下面方式

// 取"total"值return $list ['totalhttps://blog.csdn.net/qq_45764833/article/details/'];  

  结果控制台显示 :


  说明这不是数组类型。我又想是不是json格式的,就想转为数组:

// 将json数据转为数组,第二个参数改为‘false’,则转为对象$list = json_decode($list, true);return $list;

  结果和上图一样,还是没有响应数据。

var_dump()函数查看数据类型

  至此,我只能通过var_dump()函数来看看你是神马?

// var_dump()函数可以查看数据类型return var_dump($list);

  结果是这个玩意:

object(think\paginator\driver\Bootstrap)#91 (8) {  ["simple":protected]=>  bool(false)  ["items":protected]=>  object(think\Collection)#83 (1) {    ["items":protected]=>    array(2) {      [0]=>      array(3) {        ["id"]=>        int(1)        ["file_id"]=>        int(1)        ["acc_set"]=>        string(1) "A"      }      [1]=>      array(3) {        ["id"]=>        int(2)        ["file_id"]=>        int(1)        ["acc_set"]=>        string(1) "A"      }    }  }  ["currentPage":protected]=>  int(1)  ["lastPage":protected]=>  int(1)  ["total":protected]=>  int(2)  ["listRows":protected]=>  int(10)  ["hasMore":protected]=>  bool(false)  ["options":protected]=>  array(6) {    ["var_page"]=>    string(4) "page"    ["path"]=>    string(34) "/index.php/admin/vouch_info/search"    ["query"]=>    array(0) {    }    ["fragment"]=>    string(0) ""    ["list_rows"]=>    string(2) "10"    ["page"]=>    int(1)  }}

  可以看出是一个think\paginator\driver\Bootstrap对象,由于每个属性都是protected,所以也没法直接调用($list -> total)。

  那接下来就是找源码。主要涉及两个源码:Bootstrap和Paginator(Bootstrap extends Paginator),这两个源码在文章最后。
  我找源码的方式:
    在任意控制器里使用下图方式引入,然后crtl+鼠标左键

use think\paginator\driver\Bootstrap;

Bootstrap部分源码

  这两个源码也不难,简单来说Paginator类就是对分页所有数据进行处理,而Bootstrap类是将Paginator类处理好的数据渲染到模板上。

  Bootstrap类所有方法都是生成什么什么按钮,只有一个render()方法是最核心的,他就是将按钮渲染到页面上。

    public function render()    {        if ($this->hasPages()) {            if ($this->simple) {                return sprintf(                    '
    %s %s
https://blog.csdn.net/qq_45764833/article/details/'
, $this->getPreviousButton(), // 上一页按钮 $this->getNextButton()// 下一页按钮 ); } else { return sprintf( '
    %s %s %s
https://blog.csdn.net/qq_45764833/article/details/'
, $this->getPreviousButton(),// 上一页按钮 $this->getLinks(),// 页码按钮 $this->getNextButton()// 下一页按钮 ); } } }

  读到这,官方文档中这句话你就明白什么意思了:

// 获取分页显示$page = $list->render();

  所以Bootstrap类比较简单,如果只想获取数据的话用不到这个类,所以要调用父类Paginator中方法。

Paginator类部分源码

  Paginator类定义了很多属性和方法,每一个都解释篇幅太长,而且我还是刚毕业且刚转正的菜鸟,估计也很难都解释清楚。这不重要,重要的是如何获得$list中的数据。直接将Paginator类中的代码拉到底,你会看到如下方法:

     public function toArray(): array    {        try {            $total = $this->total();        } catch (DomainException $e) {            $total = null;        }        return [            'totalhttps://blog.csdn.net/qq_45764833/article/details/'        => $total,            'per_pagehttps://blog.csdn.net/qq_45764833/article/details/'     => $this->listRows(),            'current_pagehttps://blog.csdn.net/qq_45764833/article/details/' => $this->currentPage(),            'last_pagehttps://blog.csdn.net/qq_45764833/article/details/'    => $this->lastPage,            'datahttps://blog.csdn.net/qq_45764833/article/details/'         => $this->items->toArray(),        ];    }        public function jsonSerialize()    {        return $this->toArray();    }

  下面的jsonSerialize()方法也是调用toArray(),所以toArray()方法算是提供给开发人员获取Paginator类中其他所有方法处理后得到的最终数据的接口。最后所有数据都会放在toArray()方法生成的数组中,尽情使用吧!

  当然,想使用模板渲染方式的,请参考官方手册

基本使用(参考ThinkPHP6.0完全开发手册)

TP6开发手册paginate

Bootstrap和Paginator源码(tp6)

  • Bootstrap源码
// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2019 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: zhangyajun <448901948@qq.com>// +----------------------------------------------------------------------namespace think\paginator\driver;use think\Paginator;class Bootstrap extends Paginator{        protected function getPreviousButton(string $text = "«"): string    {        if ($this->currentPage() <= 1) {            return $this->getDisabledTextWrapper($text);        }        $url = $this->url(            $this->currentPage() - 1        );        return $this->getPageLinkWrapper($url, $text);    }        protected function getNextButton(string $text = '»https://blog.csdn.net/qq_45764833/article/details/'): string    {        if (!$this->hasMore) {            return $this->getDisabledTextWrapper($text);        }        $url = $this->url($this->currentPage() + 1);        return $this->getPageLinkWrapper($url, $text);    }        protected function getLinks(): string    {        if ($this->simple) {            return 'https://blog.csdn.net/qq_45764833/article/details/';        }        $block = [            'firsthttps://blog.csdn.net/qq_45764833/article/details/'  => null,            'sliderhttps://blog.csdn.net/qq_45764833/article/details/' => null,            'lasthttps://blog.csdn.net/qq_45764833/article/details/'   => null,        ];        $side   = 3;        $window = $side * 2;        if ($this->lastPage < $window + 6) {            $block['firsthttps://blog.csdn.net/qq_45764833/article/details/'] = $this->getUrlRange(1, $this->lastPage);        } elseif ($this->currentPage <= $window) {            $block['firsthttps://blog.csdn.net/qq_45764833/article/details/'] = $this->getUrlRange(1, $window + 2);            $block['lasthttps://blog.csdn.net/qq_45764833/article/details/']  = $this->getUrlRange($this->lastPage - 1, $this->lastPage);        } elseif ($this->currentPage > ($this->lastPage - $window)) {            $block['firsthttps://blog.csdn.net/qq_45764833/article/details/'] = $this->getUrlRange(1, 2);            $block['lasthttps://blog.csdn.net/qq_45764833/article/details/']  = $this->getUrlRange($this->lastPage - ($window + 2), $this->lastPage);        } else {            $block['firsthttps://blog.csdn.net/qq_45764833/article/details/']  = $this->getUrlRange(1, 2);            $block['sliderhttps://blog.csdn.net/qq_45764833/article/details/'] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side);            $block['lasthttps://blog.csdn.net/qq_45764833/article/details/']   = $this->getUrlRange($this->lastPage - 1, $this->lastPage);        }        $html = 'https://blog.csdn.net/qq_45764833/article/details/';        if (is_array($block['firsthttps://blog.csdn.net/qq_45764833/article/details/'])) {            $html .= $this->getUrlLinks($block['firsthttps://blog.csdn.net/qq_45764833/article/details/']);        }        if (is_array($block['sliderhttps://blog.csdn.net/qq_45764833/article/details/'])) {            $html .= $this->getDots();            $html .= $this->getUrlLinks($block['sliderhttps://blog.csdn.net/qq_45764833/article/details/']);        }        if (is_array($block['lasthttps://blog.csdn.net/qq_45764833/article/details/'])) {            $html .= $this->getDots();            $html .= $this->getUrlLinks($block['lasthttps://blog.csdn.net/qq_45764833/article/details/']);        }        return $html;    }        public function render()    {        if ($this->hasPages()) {            if ($this->simple) {                return sprintf(                    '
    %s %s
https://blog.csdn.net/qq_45764833/article/details/'
, $this->getPreviousButton(), $this->getNextButton() ); } else { return sprintf( '
    %s %s %s
https://blog.csdn.net/qq_45764833/article/details/'
, $this->getPreviousButton(), $this->getLinks(), $this->getNextButton() ); } } } protected function getAvailablePageWrapper(string $url, string $page): string { return '
  • . htmlentities($url) . '">https://blog.csdn.net/qq_45764833/article/details/' . $page . '
  • https://blog.csdn.net/qq_45764833/article/details/'
    ; } protected function getDisabledTextWrapper(string $text): string { return '
  • https://blog.csdn.net/qq_45764833/article/details/' . $text . https://blog.csdn.net/qq_45764833/article/details/'
  • https://blog.csdn.net/qq_45764833/article/details/'
    ; } protected function getActivePageWrapper(string $text): string { return '
  • https://blog.csdn.net/qq_45764833/article/details/' . $text . https://blog.csdn.net/qq_45764833/article/details/'
  • https://blog.csdn.net/qq_45764833/article/details/'
    ; } protected function getDots(): string { return $this->getDisabledTextWrapper('...https://blog.csdn.net/qq_45764833/article/details/'); } protected function getUrlLinks(array $urls): string { $html = 'https://blog.csdn.net/qq_45764833/article/details/'; foreach ($urls as $page => $url) { $html .= $this->getPageLinkWrapper($url, $page); } return $html; } protected function getPageLinkWrapper(string $url, string $page): string { if ($this->currentPage() == $page) { return $this->getActivePageWrapper($page); } return $this->getAvailablePageWrapper($url, $page); }}
    • Paginator源码
    // +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2019 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: zhangyajun <448901948@qq.com>// +----------------------------------------------------------------------declare (strict_types = 1);namespace think;use ArrayAccess;use ArrayIterator;use Closure;use Countable;use DomainException;use IteratorAggregate;use JsonSerializable;use think\paginator\driver\Bootstrap;use Traversable;abstract class Paginator implements ArrayAccess, Countable, IteratorAggregate, JsonSerializable{        protected $simple = false;        protected $items;        protected $currentPage;        protected $lastPage;        protected $total;        protected $listRows;        protected $hasMore;        protected $options = [        'var_pagehttps://blog.csdn.net/qq_45764833/article/details/' => 'pagehttps://blog.csdn.net/qq_45764833/article/details/',        'pathhttps://blog.csdn.net/qq_45764833/article/details/'     => '/https://blog.csdn.net/qq_45764833/article/details/',        'queryhttps://blog.csdn.net/qq_45764833/article/details/'    => [],        'fragmenthttps://blog.csdn.net/qq_45764833/article/details/' => 'https://blog.csdn.net/qq_45764833/article/details/',    ];        protected static $currentPageResolver;        protected static $currentPathResolver;        protected static $maker;    public function __construct($items, int $listRows, int $currentPage = 1, int $total = null, bool $simple = false, array $options = [])    {        $this->options = array_merge($this->options, $options);        $this->options['pathhttps://blog.csdn.net/qq_45764833/article/details/'] = '/https://blog.csdn.net/qq_45764833/article/details/' != $this->options['pathhttps://blog.csdn.net/qq_45764833/article/details/'] ? rtrim($this->options['pathhttps://blog.csdn.net/qq_45764833/article/details/'], '/https://blog.csdn.net/qq_45764833/article/details/') : $this->options['pathhttps://blog.csdn.net/qq_45764833/article/details/'];        $this->simple   = $simple;        $this->listRows = $listRows;        if (!$items instanceof Collection) {            $items = Collection::make($items);        }        if ($simple) {            $this->currentPage = $this->setCurrentPage($currentPage);            $this->hasMore     = count($items) > ($this->listRows);            $items             = $items->slice(0, $this->listRows);        } else {            $this->total       = $total;            $this->lastPage    = (int) ceil($total / $listRows);            $this->currentPage = $this->setCurrentPage($currentPage);            $this->hasMore     = $this->currentPage < $this->lastPage;        }        $this->items = $items;    }        public static function make($items, int $listRows, int $currentPage = 1, int $total = null, bool $simple = false, array $options = [])    {        if (isset(static::$maker)) {            return call_user_func(static::$maker, $items, $listRows, $currentPage, $total, $simple, $options);        }        return new Bootstrap($items, $listRows, $currentPage, $total, $simple, $options);    }    public static function maker(Closure $resolver)    {        static::$maker = $resolver;    }    protected function setCurrentPage(int $currentPage): int    {        if (!$this->simple && $currentPage > $this->lastPage) {            return $this->lastPage > 0 ? $this->lastPage : 1;        }        return $currentPage;    }        protected function url(int $page): string    {        if ($page <= 0) {            $page = 1;        }        if (strpos($this->options['pathhttps://blog.csdn.net/qq_45764833/article/details/'], '[PAGE]https://blog.csdn.net/qq_45764833/article/details/') === false) {            $parameters = [$this->options['var_pagehttps://blog.csdn.net/qq_45764833/article/details/'] => $page];            $path       = $this->options['pathhttps://blog.csdn.net/qq_45764833/article/details/'];        } else {            $parameters = [];            $path       = str_replace('[PAGE]https://blog.csdn.net/qq_45764833/article/details/', $page, $this->options['pathhttps://blog.csdn.net/qq_45764833/article/details/']);        }        if (count($this->options['queryhttps://blog.csdn.net/qq_45764833/article/details/']) > 0) {            $parameters = array_merge($this->options['queryhttps://blog.csdn.net/qq_45764833/article/details/'], $parameters);        }        $url = $path;        if (!empty($parameters)) {            $url .= '?https://blog.csdn.net/qq_45764833/article/details/' . http_build_query($parameters, 'https://blog.csdn.net/qq_45764833/article/details/', '&https://blog.csdn.net/qq_45764833/article/details/');        }        return $url . $this->buildFragment();    }        public static function getCurrentPage(string $varPage = 'pagehttps://blog.csdn.net/qq_45764833/article/details/', int $default = 1): int    {        if (isset(static::$currentPageResolver)) {            return call_user_func(static::$currentPageResolver, $varPage);        }        return $default;    }        public static function currentPageResolver(Closure $resolver)    {        static::$currentPageResolver = $resolver;    }        public static function getCurrentPath($default = '/https://blog.csdn.net/qq_45764833/article/details/'): string    {        if (isset(static::$currentPathResolver)) {            return call_user_func(static::$currentPathResolver);        }        return $default;    }        public static function currentPathResolver(Closure $resolver)    {        static::$currentPathResolver = $resolver;    }        public function total(): int    {        if ($this->simple) {            throw new DomainException('not support totalhttps://blog.csdn.net/qq_45764833/article/details/');        }        return $this->total;    }        public function listRows(): int    {        return $this->listRows;    }        public function currentPage(): int    {        return $this->currentPage;    }        public function lastPage(): int    {        if ($this->simple) {            throw new DomainException('not support lasthttps://blog.csdn.net/qq_45764833/article/details/');        }        return $this->lastPage;    }        public function hasPages(): bool    {        return !(1 == $this->currentPage && !$this->hasMore);    }        public function getUrlRange(int $start, int $end): array    {        $urls = [];        for ($page = $start; $page <= $end; $page++) {            $urls[$page] = $this->url($page);        }        return $urls;    }        public function fragment(string $fragment = null)    {        $this->options['fragmenthttps://blog.csdn.net/qq_45764833/article/details/'] = $fragment;        return $this;    }        public function appends(array $append)    {        foreach ($append as $k => $v) {            if ($k !== $this->options['var_pagehttps://blog.csdn.net/qq_45764833/article/details/']) {                $this->options['queryhttps://blog.csdn.net/qq_45764833/article/details/'][$k] = $v;            }        }        return $this;    }        protected function buildFragment(): string    {        return $this->options['fragmenthttps://blog.csdn.net/qq_45764833/article/details/'] ? '#https://blog.csdn.net/qq_45764833/article/details/' . $this->options['fragmenthttps://blog.csdn.net/qq_45764833/article/details/'] : 'https://blog.csdn.net/qq_45764833/article/details/';    }        abstract public function render();    public function items()    {        return $this->items->all();    }        public function getCollection()    {        return $this->items;    }    public function isEmpty(): bool    {        return $this->items->isEmpty();    }        public function each(callable $callback)    {        foreach ($this->items as $key => $item) {            $result = $callback($item, $key);            if (false === $result) {                break;            } elseif (!is_object($item)) {                $this->items[$key] = $result;            }        }        return $this;    }        public function getIterator()    {        return new ArrayIterator($this->items->all());    }        public function offsetExists($offset)    {        return $this->items->offsetExists($offset);    }        public function offsetGet($offset)    {        return $this->items->offsetGet($offset);    }        public function offsetSet($offset, $value)    {        $this->items->offsetSet($offset, $value);    }        public function offsetUnset($offset)    {        $this->items->offsetUnset($offset);    }        public function count(): int    {        return $this->items->count();    }    public function __toString()    {        return (string) $this->render();    }        public function toArray(): array    {        try {            $total = $this->total();        } catch (DomainException $e) {            $total = null;        }        return [            'totalhttps://blog.csdn.net/qq_45764833/article/details/'        => $total,            'per_pagehttps://blog.csdn.net/qq_45764833/article/details/'     => $this->listRows(),            'current_pagehttps://blog.csdn.net/qq_45764833/article/details/' => $this->currentPage(),            'last_pagehttps://blog.csdn.net/qq_45764833/article/details/'    => $this->lastPage,            'datahttps://blog.csdn.net/qq_45764833/article/details/'         => $this->items->toArray(),        ];    }        public function jsonSerialize()    {        return $this->toArray();    }    public function __call($name, $arguments)    {        $result = call_user_func_array([$this->items, $name], $arguments);        if ($result instanceof Collection) {            $this->items = $result;            return $this;        }        return $result;    }}

    第一次发csdn文章,有点激动,简单写两句话记录一下。
      以前我都是看别人的文章,没想到自己也勇敢迈出这步
      我改进了读别人文章的痛点,就是有时候找不到自己想要的结果在哪。我是上来就把结论给了,对于那些应急的读者很友好,如果想继续深入了解的,则可以继续读下去。
      你会问什么场景下会只用到Paginator 类处理好的数据:
        在前端只需要提供“第几页”和“每页多少条数据”这两个参数的情况下,利用tp自带的Paginator 类帮我们处理好返回的数据(一般最重要的数据就是参数"data"里包含的当前页的数据,前台直接拿来放到表格就行),而不需要我们自己在后端写复杂的分页逻辑。
        例如我现在的项目用tp6+ layui,layui的分页模块laypage只提供“第几页”和“每页多少条数据”这两个参数,分页逻辑要后台写。我从网上找了tp分页逻辑代码,写的都挺乱,也挺多了,所以就想着利用tp自带的Paginator 。Paginator 既然能成功的将分页渲染到模板,那他里面肯定写好了处理分页的逻辑,不用白不用。
        上段读完你可能会有一个疑问,Paginator 如何接收“第几页”和“每页多少条数据”这两个参数?

    // list_rows传入“每页多少条数据”, page传入“第几页”$list = Db::name('userhttps://blog.csdn.net/qq_45764833/article/details/')->where('statushttps://blog.csdn.net/qq_45764833/article/details/',1)->paginate([                'list_rowshttps://blog.csdn.net/qq_45764833/article/details/'=> “每页多少条数据”,                'pagehttps://blog.csdn.net/qq_45764833/article/details/' => “第几页”,            ]);

      最后的最后,感谢你观看。想和我一起探讨tp+html+css+js+jquery+layui相关问题的,欢迎加我qq:1853172620。我也是刚工作的菜鸟,愿我们一起共同进步。

    来源地址:https://blog.csdn.net/qq_45764833/article/details/129043310

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    thinkphp(tp)中paginate方法的学习

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    学习ActionScript3的方法

    1。当理论学不进去的时候,就应该通过实例来学2。学习实例可以提高兴趣,熟悉代码,就算没搞懂,也能混个脸熟。3。然后再看理论时,就会容易一些。理论是一定要看的。4。只有实例到理论,理论再到实例,实例再到理论,几个大轮回以后,就能打通任 督二脉
    2023-01-31

    学习Golang中同名方法的要点

    Golang语言中的同名方法是指在一个结构体中同时定义多个方法,方法名相同但接收者类型不同。在使用同名方法时,需要注意一些细节,否则会导致编译错误或者意想不到的行为。下面将通过具体的代码示例,来讨论掌握Golang同名方法的注意事项。假
    学习Golang中同名方法的要点
    2024-02-23

    thinkphp中的add方法如何用

    本文小编为大家详细介绍“thinkphp中的add方法如何用”,内容详细,步骤清晰,细节处理妥当,希望这篇“thinkphp中的add方法如何用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。thinkphp中的a
    2023-07-04

    thinkphp中的s方法如何用

    本篇内容主要讲解“thinkphp中的s方法如何用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp中的s方法如何用”吧!thinkphp中的s方法支持有效期,又称动态缓存方法,其使
    2023-06-22

    thinkphp中的L方法如何用

    本文小编为大家详细介绍“thinkphp中的L方法如何用”,内容详细,步骤清晰,细节处理妥当,希望这篇“thinkphp中的L方法如何用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在thinkphp中,L方法用
    2023-06-29

    IT人的学习方法论-3 高效学习的建议

    /*----------------------------------------本系列共7篇文章,目前已经完成如下内容:IT人的学习方法论-1,讨论学习的方向IT人的学习方法论-2,讨论学习的误区IT人的学习方法论-3,讨论学习的方法I
    2023-01-31

    thinkphp中的T方法怎么用

    本篇内容主要讲解“thinkphp中的T方法怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp中的T方法怎么用”吧!在thinkphp中,T方法用于生成模板文件名,语法“T([
    2023-06-29

    thinkphp中的fetch方法如何用

    这篇文章主要介绍“thinkphp中的fetch方法如何用”,在日常操作中,相信很多人在thinkphp中的fetch方法如何用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”thinkphp中的fetch方法
    2023-06-30

    TensorFlow中的集成学习方法有哪些

    TensorFlow中常用的集成学习方法包括:随机森林(Random Forest):随机森林是一种基于决策树的集成学习方法,通过构建多个决策树来提高预测准确度。梯度提升树(Gradient Boosting Tree):梯度提升树是一种迭
    TensorFlow中的集成学习方法有哪些
    2024-03-01

    ASP.NET的学习方法有哪些

    本篇内容介绍了“ASP.NET的学习方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如果你已经有较多的面向对象开发经验,跳过以下这两
    2023-06-17

    如何使用thinkphp中的a方法

    小编给大家分享一下如何使用thinkphp中的a方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!thinkphp中的a方法用于在内部实例化控制器,其调用格式是“
    2023-06-22

    thinkphp中的m方法怎么使用

    本文小编为大家详细介绍“thinkphp中的m方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“thinkphp中的m方法怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。thinkphp中的m方法
    2023-07-05

    thinkphp中的save方法怎么使用

    这篇文章主要讲解了“thinkphp中的save方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“thinkphp中的save方法怎么使用”吧!ThinkPHP是一个著名的PHP框架
    2023-07-05

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录