PHP 怎么PHP工具函数库

wen PHP项目 2

本文目录导读:

PHP 怎么PHP工具函数库

  1. 简单函数库(面向过程)
  2. 类库封装(面向对象)
  3. 使用 Composer 管理工具库
  4. 常见工具函数示例
  5. 最佳实践建议

我来为你介绍几种创建和使用 PHP 工具函数库的方法:

简单函数库(面向过程)

创建工具文件 helpers.php

<?php
// 字符串工具函数
function str_contains_any($haystack, array $needles) {
    foreach ($needles as $needle) {
        if (strpos($haystack, $needle) !== false) {
            return true;
        }
    }
    return false;
}
function generate_uuid() {
    return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand(0, 0xffff), mt_rand(0, 0xffff),
        mt_rand(0, 0xffff),
        mt_rand(0, 0x0fff) | 0x4000,
        mt_rand(0, 0x3fff) | 0x8000,
        mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
    );
}
// 数组工具函数
function array_flatten(array $array) {
    $result = [];
    array_walk_recursive($array, function($value) use (&$result) {
        $result[] = $value;
    });
    return $result;
}
// 格式化函数
function format_bytes($bytes, $precision = 2) {
    $units = ['B', 'KB', 'MB', 'GB', 'TB'];
    $bytes = max($bytes, 0);
    $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
    $pow = min($pow, count($units) - 1);
    $bytes /= (1 << (10 * $pow));
    return round($bytes, $precision) . ' ' . $units[$pow];
}

使用方式

<?php
require_once 'helpers.php';
// 使用工具函数
echo generate_uuid();
echo format_bytes(1024 * 1024); // 输出: 1.00 MB

类库封装(面向对象)

创建工具类 StringHelper.php

<?php
namespace App\Helpers;
class StringHelper
{
    public static function truncate($str, $length = 30, $suffix = '...')
    {
        return mb_strlen($str) > $length 
            ? mb_substr($str, 0, $length) . $suffix 
            : $str;
    }
    public static function slugify($text)
    {
        $text = preg_replace('~[^\pL\d]+~u', '-', $text);
        $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
        $text = preg_replace('~[^-\w]+~', '', $text);
        $text = trim($text, '-');
        $text = preg_replace('~-+~', '-', $text);
        $text = strtolower($text);
        return empty($text) ? 'n-a' : $text;
    }
    public static function random($length = 10)
    {
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        return $randomString;
    }
}

数组工具类 ArrayHelper.php

<?php
namespace App\Helpers;
class ArrayHelper
{
    public static function get(array $array, $key, $default = null)
    {
        if (is_null($key)) return $array;
        if (isset($array[$key])) {
            return $array[$key];
        }
        foreach (explode('.', $key) as $segment) {
            if (!is_array($array) || !array_key_exists($segment, $array)) {
                return $default;
            }
            $array = $array[$segment];
        }
        return $array;
    }
    public static function sortBy(array $array, $key, $order = 'asc')
    {
        usort($array, function($a, $b) use ($key, $order) {
            $aVal = self::get($a, $key, '');
            $bVal = self::get($b, $key, '');
            if ($order === 'desc') {
                return $bVal <=> $aVal;
            }
            return $aVal <=> $bVal;
        });
        return $array;
    }
    public static function removeEmpty(array $array)
    {
        return array_filter($array, function($value) {
            return !($value === '' || $value === null || $value === []);
        });
    }
}

使用方式

<?php
use App\Helpers\StringHelper;
use App\Helpers\ArrayHelper;
echo StringHelper::slugify("Hello World! This is PHP");
echo StringHelper::truncate("这是一段很长的文本", 5);
$data = [
    'user' => [
        'name' => '张三',
        'age' => 25
    ]
];
echo ArrayHelper::get($data, 'user.name'); // 输出: 张三

使用 Composer 管理工具库

创建 composer 包

composer.json:

{
    "name": "yourname/helpers",
    "description": "Collection of PHP helper functions",
    "autoload": {
        "files": [
            "src/helpers.php"
        ],
        "psr-4": {
            "YourNamespace\\Helpers\\": "src/"
        }
    },
    "require": {
        "php": ">=7.0"
    }
}

项目中使用

composer require yourname/helpers
<?php
require 'vendor/autoload.php';
use YourNamespace\Helpers\StringHelper;
use YourNamespace\Helpers\ArrayHelper;

常见工具函数示例

日期时间工具

<?php
function format_date($date, $format = 'Y-m-d H:i:s')
{
    if (!$date) return '';
    if (is_string($date)) $date = strtotime($date);
    return date($format, $date);
}
function time_ago($datetime)
{
    $timestamp = strtotime($datetime);
    $difference = time() - $timestamp;
    if ($difference < 60) return "刚刚";
    if ($difference < 3600) return floor($difference / 60) . "分钟前";
    if ($difference < 86400) return floor($difference / 3600) . "小时前";
    if ($difference < 2592000) return floor($difference / 86400) . "天前";
    return date('Y-m-d', $timestamp);
}

安全相关

<?php
function sanitize_input($input)
{
    return htmlspecialchars(trim($input), ENT_QUOTES, 'UTF-8');
}
function validate_email($email)
{
    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
function generate_token($length = 32)
{
    return bin2hex(random_bytes($length));
}

最佳实践建议

  1. 命名规范:函数名使用动词+名词,清晰表达功能
  2. 单一职责:每个函数只做一件事
  3. 文档注释:为每个函数添加文档注释
  4. 参数类型检查:在函数内部进行类型检查
  5. 默认值:合理设置参数默认值
  6. 避免全局冲突:使用命名空间避免函数名冲突
<?php
/**
 * 生成安全的随机密码
 * 
 * @param int $length 密码长度
 * @param bool $allowSpecialChars 是否包含特殊字符
 * @return string 生成的密码
 */
function generate_password($length = 12, $allowSpecialChars = true)
{
    $lowercase = 'abcdefghijklmnopqrstuvwxyz';
    $uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $digits = '0123456789';
    $special = '!@#$%^&*()_+-=[]{};:,.<>?';
    $pool = $lowercase . $uppercase . $digits;
    if ($allowSpecialChars) {
        $pool .= $special;
    }
    $password = '';
    $poolLength = strlen($pool);
    // 确保至少包含每种字符类型
    $password .= $lowercase[rand(0, 25)];
    $password .= $uppercase[rand(0, 25)];
    $password .= $digits[rand(0, 9)];
    if ($allowSpecialChars) {
        $password .= $special[rand(0, strlen($special) - 1)];
    }
    // 填充剩余长度
    for ($i = strlen($password); $i < $length; $i++) {
        $password .= $pool[rand(0, $poolLength - 1)];
    }
    return str_shuffle($password);
}

这些方法可以根据你的项目需求选择合适的方案,对于大型项目,建议使用 Composer 管理工具库,并通过命名空间组织代码。

抱歉,评论功能暂时关闭!