PHP常用的类封装小结【4个工具类】

PHP常用的类封装小结【4个工具类】

在PHP开发中,使用类的封装可以提高代码的复用性、可维护性和可读性。本文介绍了4种常用的PHP类封装,包括:

  • Curl类封装
  • Redis类封装
  • MySQL类封装
  • 日志类封装

下面将详细介绍这4种类的封装方法以及使用场景。

Curl类封装

Curl是一种网络传输工具,PHP中内置了Curl扩展,可以用来发送HTTP请求等。封装Curl类可以减少重复代码,方便使用。以下是Curl类封装的示例代码:

class Curl
{
    public static function get($url, $params = [], $headers = [])
    {
        // 初始化
        $ch = curl_init();

        // 设置URL和其他参数
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        if (!empty($params)) {
            $query = http_build_query($params);
            curl_setopt($ch, CURLOPT_URL, $url . '?' . $query);
        }
        if (!empty($headers)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }

        // 执行
        $response = curl_exec($ch);

        // 关闭
        curl_close($ch);

        return $response;
    }

    public static function post($url, $params = [], $headers = [])
    {
        // 初始化
        $ch = curl_init();

        // 设置URL和其他参数
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
        if (!empty($headers)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }

        // 执行
        $response = curl_exec($ch);

        // 关闭
        curl_close($ch);

        return $response;
    }
}

使用示例:

$result = Curl::get('https://www.example.com/api', ['page' => 1], ['Authorization: Bearer token']);
echo $result;

$result = Curl::post('https://www.example.com/api', ['username' => 'admin', 'password' => '123456'], ['Authorization: Bearer token']);
echo $result;

Redis类封装

Redis是一种内存数据库,常用于缓存数据等。使用Redis类封装可以方便地连接和操作Redis。以下是Redis类封装的示例代码:

class RedisClient
{
    private $redis;

    public function __construct($host, $port, $password = null, $database = 0)
    {
        $this->redis = new Redis();
        $this->redis->connect($host, $port);
        if (!empty($password)) {
            $this->redis->auth($password);
        }
        $this->redis->select($database);
    }

    public function set($key, $value, $expire = 0)
    {
        $this->redis->set($key, $value);
        if ($expire > 0) {
            $this->redis->expire($key, $expire);
        }
    }

    public function get($key)
    {
        return $this->redis->get($key);
    }

    public function delete($key)
    {
        return $this->redis->del($key);
    }
}

使用示例:

$redis = new RedisClient('127.0.0.1', 6379, 'password', 0);

$redis->set('name', 'John', 3600);
$name = $redis->get('name');
echo $name;

$redis->delete('name');

MySQL类封装

MySQL是一种关系型数据库,使用MySQL类封装可以方便地连接和操作MySQL。以下是MySQL类封装的示例代码:

class MySQLClient
{
    private $mysqli;

    public function __construct($host, $username, $password, $database, $port = 3306)
    {
        $this->mysqli = new mysqli($host, $username, $password, $database, $port);
        if ($this->mysqli->connect_error) {
            throw new Exception($this->mysqli->connect_error);
        }
        $this->mysqli->set_charset('utf8mb4');
    }

    public function query($sql)
    {
        $result = $this->mysqli->query($sql);
        if ($result === false) {
            throw new Exception($this->mysqli->error);
        }
        return $result;
    }

    public function execute($sql)
    {
        $result = $this->mysqli->query($sql);
        if ($result === false) {
            throw new Exception($this->mysqli->error);
        }
        return $this->mysqli->affected_rows;
    }

    public function fetchAll($sql)
    {
        $result = $this->mysqli->query($sql);
        if ($result === false) {
            throw new Exception($this->mysqli->error);
        }
        $rows = [];
        while ($row = $result->fetch_assoc()) {
            $rows[] = $row;
        }
        return $rows;
    }
}

使用示例:

$mysql = new MySQLClient('localhost', 'root', 'password', 'test', 3306);

$result = $mysql->fetchAll('SELECT * FROM users WHERE age > 18');
print_r($result);

$count = $mysql->execute('UPDATE users SET status = 1 WHERE age > 18');
echo $count;

日志类封装

日志记录是一种常见的需求,在PHP开发中经常需要记录各种信息以便于排查问题。使用日志类封装可以方便地记录和管理日志。以下是日志类封装的示例代码:

class Logger
{
    private $file;

    public function __construct($file)
    {
        $this->file = $file;
    }

    public function log($level, $message, $context = [])
    {
        $dateTime = (new DateTime())->format('Y-m-d H:i:s');
        $contextString = '';
        if (!empty($context)) {
            $contextString = json_encode($context, JSON_UNESCAPED_UNICODE);
        }
        $line = sprintf('[%s] [%s] %s %s%s', $dateTime, $level, $message, $contextString, PHP_EOL);
        file_put_contents($this->file, $line, FILE_APPEND);
    }

    public function debug($message, $context = [])
    {
        $this->log('DEBUG', $message, $context);
    }

    public function info($message, $context = [])
    {
        $this->log('INFO', $message, $context);
    }

    public function warning($message, $context = [])
    {
        $this->log('WARNING', $message, $context);
    }

    public function error($message, $context = [])
    {
        $this->log('ERROR', $message, $context);
    }
}

使用示例:

$logger = new Logger('app.log');

$logger->info('User login', ['username' => 'admin']);
$logger->warning('Invalid request', ['ip' => '127.0.0.1']);

以上是4种常用的PHP类封装方法的详细介绍和示例。这些类的封装都可以提高代码的复用性、可维护性和可读性,在使用中可以根据实际情况进行调整和拓展。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP常用的类封装小结【4个工具类】 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • PHP递归算法的简单实例

    让我为你详细讲解“PHP递归算法的简单实例”的完整攻略。 什么是递归算法 递归是一种算法方法,是指函数自己调用自己,直到满足某个条件时停止调用。递归算法是解决许多问题的强大工具,如搜索、排序、遍历等。 在递归算法中,需要解决以下两个问题: 递归终止条件:必须有终止条件,否则递归会一直执行下去,直到栈溢出。 递归递推公式:将大问题拆解成小问题,并通过递归调用自…

    PHP 2023年5月27日
    00
  • 简单的php数据库操作类代码(增,删,改,查)

    下面是关于“简单的php数据库操作类代码(增,删,改,查)”的完整攻略: 1. 简介 在Web应用程序中,需要与数据库进行交互,以添加、删除、更新和查询数据。为了使代码更加可读、可维护和可重用,我们通常使用数据库操作类。这篇文章介绍了一个使用PHP编写的简单的数据库操作类,并提供了增、删、改、查的代码示例。 2. 数据库操作类 下面是一个基本的数据库操作类,…

    PHP 2023年5月24日
    00
  • 一文带你搞懂PHP对象注入

    以下是关于“一文带你搞懂PHP对象注入”的完整使用攻略: 基础知识 在了解PHP对象注入之前需要掌握一些基础知识,包括对象注入的基本概念、对象注入的原理、对象注入的危害等。以下是一些常见的基础知识: 对象注入的基本概念包括对象注入的定义、对象注入的分类、对象注入的实现方式等。 对象注入的原理包括对象注入的成因、对象注入的利用方式等。 对象注入的危害括数据泄露…

    PHP 2023年5月12日
    00
  • 微信小程序 网络API Websocket详解

    微信小程序-网络API WebSocket详解 简介 现今的移动应用开发中,前后端分离已经成为一个显然的趋势。在这样的情况下,和后端交互,获取数据已经成为了一个移动应用开发的基本需求。所以,在大多数的应用中,都需要用到网络请求。其中,Websocket是网络请求的一种。 Websocket是什么? 说白了,Websocket就是一个协议,一种在web浏览器和…

    PHP 2023年5月23日
    00
  • PHP 多进程与信号中断实现多任务常驻内存管理实例方法

    下面是关于“PHP 多进程与信号中断实现多任务常驻内存管理实例方法”的完整攻略。 什么是多进程与信号中断? 多进程指的是在一个程序(或系统)中同时运行多个进程。信号中断则是指在一个进程中使用信号机制来实现中断处理。 在PHP中,使用多进程和信号中断可以实现多任务常驻内存管理。每个任务可以单独运行,相互独立,且可以随时停止或重新启动,非常方便实用。 如何实现多…

    PHP 2023年5月27日
    00
  • PHP结合vue导出excel出现乱码的解决方法分享

    下面是“PHP结合vue导出excel出现乱码的解决方法分享”的完整使用攻略,包括问题原因、解决方法和两个示例说明。 问题原因 在PHP结合vue导出excel时,如果文件中包含中文字符,可能会出现乱码的问题。这是因为Excel文件默认使用的编码格式是UTF-8,而PHP默认使用的编码格式是ISO-8859-1,两者不兼容导致的。 解决方法 以下是解决PHP…

    PHP 2023年5月12日
    00
  • php实现微信公众号主动推送消息

    关于“php实现微信公众号主动推送消息”的攻略,我们可以分为以下几个步骤: 第一步:获得微信公众号的开发者账号和配置 在微信公众平台账号中心注册账号,并按照要求进行开发者认证。在微信公众平台中创建自己的公众号,并配置消息模板和服务器地址,将服务器地址填写到公众号设置中。 第二步:服务器端使用PHP提供接口 服务器端使用PHP编写具有接收微信消息和发送微信消息…

    PHP 2023年5月23日
    00
  • 微信小程序实现用table显示数据库反馈的多条数据功能示例

    下面我会为你提供一份完整的攻略,详细地讲解如何实现“微信小程序实现用table显示数据库反馈的多条数据功能示例”。 1. 准备工作 在开始之前,我们需要先进行准备工作。具体工作如下:1. 准备微信开发者工具,确保能够正常创建小程序项目;2. 准备一个数据源,可以是本地文件夹或者远程数据库服务器。 2. 创建表格组件 在小程序页面的wxml文件中添加一个tab…

    PHP 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部