
PHP
PHP笔记整理
木子兄
生活中需要懂得感恩,感恩有时就像一场永不间断的接力赛,接棒的人是很幸福的,递棒的人更是乐在其中,一种行为,多人收益。
展开
-
PHP代码性能优化
1 、方法尽量静态化(通常用于常用的配置项或经常使用的对象实例):静态方法在程序开始时生成于内存中,所以静态方法可以直接调用,实例方法要先实例化对象才可以调用,静态速度很快,但是多了会占内存,静态方法始终调用同一块内存,其缺点就是不能自动进行销毁,而实例化可以销毁。2、echo效率高于print:因为echo没有返回值,print返回一个整型。测试:echo0.000929 - 0.001255 s (平均 0.001092 seconds)print0.000980 - 0.001396 s原创 2022-01-20 18:25:40 · 275 阅读 · 0 评论 -
PHP实现排行榜 - 模拟Redis中的有序集合
实现思路:1、利用位运算,将需要排序的数值保存到对应的二进制分段上;比如:高位保存积分,低位保存时间戳等;2、需要注意数值的大小,不能超出二进制64位的表示范围;比如:时间戳可以通过未来多少年的时间减去当前的时间戳,把计算的差值保存到二进制中;代码实现逻辑:// 模拟来自数据表的数据$list = [ ['uid'=>1001,'score'=>80,'time'=>1617365056], ['uid'=>1002,'score'=>90,'time原创 2021-04-03 12:23:55 · 488 阅读 · 0 评论 -
设计模式 - 行为型【策略模式】
示例1:数据过滤interface Filter{ public function filter($str);}class HtmlFilter implements Filter{ public function filter($str){ //strip out the HTML return $str; }}class SwearFilter implements Filter{ public function filter($str){ // Cross out sw原创 2021-03-29 16:19:29 · 90 阅读 · 0 评论 -
设计模式 - 结构型【组合模式】
使用场景:组合模式适用于当我们的一个对象可能代表一个实体,或者一个组合的实体;比如:雇员->部门、表单元素->HTML表单表单元素->HTML表单:abstract class FormComponent(){ abstract function add(FormComponent $obj); abstract function remove(FormComponent $obj); abstract function display(); abstract func原创 2021-03-29 16:07:13 · 82 阅读 · 0 评论 -
设计模式 - 创建型【单例模式、工厂模式】
单例模式:// 使用单例模式的好处就是可以节省内存,只创建一个对象class Test{ private static $_instance = NULL; private function __construct(){} //防止在外部实例化 private function __clone(){} //防止对象在外部被克隆 public static function getInstance(){ }}工厂模式:abstract class ShapeFactory{原创 2021-03-29 15:52:14 · 70 阅读 · 0 评论 -
PHP命令行与定时任务
命令行使用场景:一般结合定时任务执行,用于处理一些定时的事务,例如:结算、推送、清理过期数据等;脚本文件:run_crontab.php#!/usr/bin/php<?php// 防止非命令行下执行if (PHP_SAPI !== 'cli'){ exit();}var_dump($_SERVER['argc']); // 执行脚本时命令行中的参数个数(包含脚本本身)/*** 输出:int(1)*/var_dump($_SERVER['argv']); // 执行脚本原创 2021-03-27 15:57:59 · 339 阅读 · 3 评论 -
PHP手册整理 - 函数【内置函数(类属性相关的函数)】
class_alias 函数:// class_alias — 为一个类创建别名class_alias('original_name', 'alias_name');class_exists 函数:// class_exists — 检查类是否已定义if (class_exists('MyClass')) { $myclass = new MyClass();}get_called_class 函数:// get_called_class — 后期调用静态方法的类名clas原创 2021-02-18 12:13:02 · 158 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(数组处理函数)】
array_chunk 函数:// array_chunk — 将一个数组分割成多个$input_array = array('a', 'b', 'c', 'd', 'e');print_r(array_chunk($input_array, 2));print_r(array_chunk($input_array, 2, true)); // 保留输入数组中原来的键名array_column 函数:// array_column — 返回数组中指定的一列$records = array原创 2021-02-18 11:49:59 · 165 阅读 · 0 评论 -
PHP手册整理 - 函数【扩展函数(Session扩展)】
session_start 函数(一切session操作的开始):// session_start — 启动新会话或者重用现有会话session_start();session_destroy 函数:// session_destroy — 销毁一个会话中的全部数据session_start();session_destroy();session_id 函数:// session_id — 获取/设置当前会话 ID$s = session_id();var_dump($s);原创 2021-02-18 10:47:44 · 237 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(网络)】
header 函数:// header — 发送原生 HTTP 头// URL重定向header('Location: http://www.example.com/');// 设置响应状态码header("HTTP/1.0 404 Not Found");// 响应一个pdf文件header('Content-type: application/pdf');header('Content-Disposition: attachment; filename="downloaded.pd原创 2021-01-27 20:53:07 · 140 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(CURL扩展)】
// curl_init — 初始化 cURL 会话$ch = curl_init();$ch = curl_init('http://www.xxx.com/');// curl_setopt — 设置 cURL 传输选项// curl_setopt_array — 为 cURL 传输会话批量设置选项curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");$opt = [ CURLOPT_POST => 1原创 2021-01-20 19:34:30 · 208 阅读 · 1 评论 -
PHP手册整理 - 函数【内置函数(执行外部指令)】
$output = [];$cmd = 'who';$pfile = 'test.log';$status = 0;exec("{$cmd}", $output, $status);// 只有执行成功才有数据if ($status === 0) { file_put_contents($pfile, '--------------------------'.date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND); file_put_contents($pfi原创 2021-01-20 19:33:11 · 109 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(数学相关)】
// abs — 绝对值$abs = abs(-4.2); // $abs = 4.2; (double/float)$abs3 = abs(-5); // $abs3 = 5; (integer)// bindec — 二进制转换为十进制echo bindec('110011') . "\n";// ceil — 进一法取整echo ceil(1.26); // 1// decbin — 十进制转换为二进制echo decbin(12) . "\n";// dechex — 十原创 2021-01-20 18:26:21 · 258 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(操作CSV文件)】
fputcsv 函数:// fputcsv — 将行格式化为 CSV 并写入文件指针$csv_header = [ 'Id', 'Title', 'Date']; $csv_data = [ [ '1', 'test 1', date('Y/m/d H:i:s') ], [ '2', 'test 2', date('Y/m/d H:i:s') ], [ '3', 'test 3', date('Y/m/d H:i:s') ],];$fp原创 2021-01-13 20:28:05 · 153 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(加密函数)】
hash_file、md5_file 函数:// hash_file — 使用给定文件的内容生成哈希值// md5_file — 计算文件的md5值// md5_file('./test.php')等同于hash_file('md5','./test.php');echo md5_file('./test.php');echo '---';echo hash_file('md5','./test.php');hash、md5 函数:// hash — 生成哈希值 (消息摘要)//原创 2021-01-13 18:04:58 · 152 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(PHP信息相关)】
扩展相关函数【extension_loaded、get_loaded_extensions】:// extension_loaded — 检查一个扩展是否已经加载extension_loaded('gd') or die('没有找到gd扩展!');// get_loaded_extensions — 返回所有编译并加载模块名,类似命令行的 php -m$loaded_extensions = get_loaded_extensions();print_r($loaded_extensions);原创 2020-12-29 12:30:30 · 137 阅读 · 0 评论 -
PHP手册整理 - 安全【参数过滤、防止SQL 注入、隐藏PHP信息等】
客户端提交的参数过滤:// 不严谨的示例代码:$file = $_GET['file']; // "../../etc/passwd"if ( file_exists('/home/wwwrun/' . $file . '.php' )) { include '/home/wwwrun/' . $file . '.php' ;}// 因此,任何用于操作文件系统的字符串(译注:特别是程序外部输入的字符串)都必须经过适当的检查。// 以下是上述例子的改进版本: // 验证输入的正原创 2020-12-24 11:17:04 · 223 阅读 · 0 评论 -
PHP手册整理 - 杂项【对象比较、类型约束、引用和对象、命名空间、生成器使用】
对象比较:当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。 而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。类型约束:// $test 变量必须是 TestClass 的实例对象function test( TestClass $test ) { echo $test->var ;}引用和对象: $c = new A ;原创 2020-12-23 20:48:17 · 117 阅读 · 0 评论 -
PHP手册整理 - 预定义变量
$GLOBALS 包含($_SERVER, $_GET, $_POST, $_FILES, $_COOKIE, $_SESSION, $_REQUEST, $_ENV) $_SERVER 变量详解:array ( 'USER' => 'www', // 执行脚本的用户 'HOME' => '/home/www', // 执行脚本的用户的根目录 'HTTP_CACHE_CONTROL' => 'max-age=0', // 用于设置htt原创 2020-12-23 20:24:19 · 139 阅读 · 0 评论 -
PHP手册整理 - 图像处理
图像处理函数:--画布管理imagecreate()imagecreatetruecolor()imagedestroy() --设置颜色imagecolorallocate()--生成图像imagegif()imagejpeg()imagepng()imagewbmp()function_exists('imagegif') //判断是否支持图像--绘制图像imagefill()--绘制像素点和直线imagesetpixel()imageline()--绘制原创 2020-12-15 12:16:16 · 181 阅读 · 0 评论 -
PHP手册整理 - 文件系统处理
文件校验函数【is_file、is_dir、file_exists、is_readable、is_writeable、is_executable】:// is_file — 判断给定文件名是否为一个正常的文件var_dump(is_file('a_file.txt')) . "\n"; // truevar_dump(is_file('/usr/bin/')) . "\n"; // false// is_dir — 判断给定文件名是否是一个目录var_dump(is_dir('a_file.t原创 2020-12-07 20:25:16 · 112 阅读 · 0 评论 -
PHP手册整理 - 日期和时间
time函数:// 返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数echo time();// 发起该请求时刻的时间戳echo $_SERVER['REQUEST_TIME'];DateTime工具类:/** * 粗略计算时间的差异 * * @param $date * * @return string */function getTimeInterval($date){ try { $dat原创 2020-11-27 20:28:31 · 117 阅读 · 0 评论 -
PHP手册整理 - 错误和异常处理
设置显示错误信息的级别:【error_reporting】# 当设置了自定义处理函数,error_reporting则无效define('DEBUG', true);if (DEBUG) { // 报告所有 PHP 错误 error_reporting(E_ALL); // 除了 E_NOTICE,报告其他所有错误 //error_reporting(E_ALL ^ E_NOTICE); // 设置错误信息显示开关 ini_set("display_errors"原创 2020-11-27 18:11:17 · 111 阅读 · 0 评论 -
PHP手册整理 - 类与对象
$this 当前对象get_class($this); 获取当前对象所属的类型extends 继承某个类new 创建类对象,在类定义内部,可以用 new self 和 new parent 创建新对象。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。可以通过 parent:: 来访问被覆盖的方法或属性(当扩展父类中某个方法时不用重复写父类方法部分,执行调用即可,然后再扩展)public,protected ,private (属性原创 2020-10-03 10:55:39 · 203 阅读 · 1 评论 -
PHP手册整理 - 函数【内置函数(加载函数)】
include_once 函数:// include_once 包含文件,程序出错仍然可以往下执行(如果该文件中已经被包含过,则不会再次包含)include_once "a.php"; // 包含 a.phpinclude_once "a.php"; // 再次包含 a.php! require_once 函数:// require_once 包含文件,包含核心部分,程序出错停止运行 require_once 'core.php';...原创 2020-09-27 19:41:08 · 107 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(变量处理函数))】
unset 函数:// unset 销毁变量,释放内存// 如果在函数中的一个全局变量,只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值;function destroy_foo() { global $foo; unset($foo);}$foo = 'bar';destroy_foo();echo $foo;...原创 2020-09-27 19:35:34 · 101 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(正则函数)】
preg_match 函数:// preg_match 执行匹配正则表达式// 参数说明:// $pattern 必传参数,正则表达式,字符串类型// $subject 必传参数,进行匹配的字符串// &$matches 可选参数,匹配完整结果,$matches[0]将包含完整模式匹配到的文本,// $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推// $f原创 2020-09-27 18:22:34 · 173 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(比较函数)】
strcmp 函数:// strcmp 二进制安全字符串比较(区分大小写)$var1 = "Hello";$var2 = "hello";if (strcmp($var1, $var2) !== 0) { echo '在区分大小写的字符串比较中,$var1不等于$var2';}strcasecmp 函数:// strcasecmp 二进制安全比较字符串(不区分大小写)$var1 = "Hello";$var2 = "hello";if (strcasecmp($var1,原创 2020-09-23 21:51:34 · 99 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(文本处理函数)】
ord 函数:// ord 返回字符串 string 第一个字符的 ASCII 码值$ascii_0 = ord(0);$ascii_a = ord('a');echo $ascii_0,'---',$ascii_a;chr 函数:// chr 返回相对应于 ascii 所指定的单个字符$a = chr(97);echo $a;str_split 函数:// str_split 将字符串转换为数组// 如果指定了字符块的分隔长度,此时结果为每个指定长度的字符块数组,否则每个字原创 2020-09-22 21:17:44 · 382 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(检测变量函数)】
isset 函数// isset 检测变量是否设置$var = '';// 结果为 TRUE,所以后边的文本将被打印出来if (isset($var)) { echo "var 变量已设置";}$a = true;$b = true;var_dump(isset($a)); // truevar_dump(isset($a, $b)); // trueunset ($a); // 销毁变量 avar_dump(isset($a)); // fals原创 2020-09-22 16:15:09 · 175 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(错误处理函数)】
set_error_handler 函数:// 设置一个用户定义的错误处理函数,本函数可以用你自己定义的方式来处理运行中的错误;// 例如,在应用程序中严重错误发生时,或者在特定条件下触发了一个错误(使用 trigger_error()),你需要对数据/文件做清理回收。set_error_handler('appError');/** * 自定义错误处理函数 * * @param int $error_level 错误级别 * @param string $error_me原创 2020-09-22 15:56:38 · 133 阅读 · 0 评论 -
PHP手册整理 - 函数【内置函数(打印函数)】
var_dump 函数:// var_dump 此函数可以打印任何变量$db = new mysqli('127.0.0.1','root','root','test'); // 对象类型$str = 'Hello World'; // 字符串类型$num = 10; // int类型$arr = ['Jena','Kitty'];// 数组类型var_dump($_SERVER,$db,$str,$num,$arr);print_r 函数:// print原创 2020-09-22 11:42:58 · 248 阅读 · 0 评论 -
PHP手册整理 - 函数【自定义函数】
无参数函数:// 声明无参数函数function getConfig(){ $config = []; return $config;}// 调用无参数函数$config = getConfig();var_dump($config);固定参数函数:// 声明带参数函数function getConfig( $key = '' ){ $config = [ 'host' => '127.0.0.1', 'port' => '11211', ]; retu原创 2020-09-22 09:29:09 · 74 阅读 · 0 评论 -
PHP手册整理 - 流程控制
if 语句:$is_show = true;if ( $is_show ) { echo '显示';}else 语句:$is_show = true;if ( $is_show ) { echo '显示';} else { echo '不显示';}elseif / else if 语句:$is_vip = 0;if ( $is_vip === 1 ) { echo 'VIP-1';} elseif ( $is_vip === 2 ) { echo 'VIP-2';原创 2020-09-21 20:56:18 · 159 阅读 · 0 评论 -
PHP手册整理 - 运算符
对象操作运输符(new,clone,instanceof)://------ new:创建对象//------ clone:克隆对象//------ instanceof:对象验证是否属于某个类namespace Test;class Test{} $test = new Test(); // 创建对象 $test_c = clone $test; // 克隆对象var_dump($test,$test_c); if($test instanceof Test)原创 2020-09-21 20:07:34 · 123 阅读 · 0 评论 -
PHP手册整理 - 常量
常量:defined('PATH') OR define('PATH','/www/default'); // 常量定义echo PATH; // 常量使用魔术常量:echo __LINE__; // 文件中的当前行号 echo __FILE__; // 文件的完整路径和文件名"D:\phpstudy_pro\WWW\index.php"echo __DIR__; // 文件所在的目录"D:\phpstudy_pro\WWW"// 函数名常原创 2020-09-21 19:13:07 · 931 阅读 · 0 评论 -
PHP手册整理 - 变量
变量赋值: // 变量赋值 $a = 10;变量引用: $a = 10; $b = &$a; // 引用赋值 $b = 20; var_dump($a,$b); // 此时a、b变量输出值都为:10动态变量: $a = 'b'; $b = 20; $c = $$a; // 动态变量赋值 echo $c; // 此时c变量输出值都为:20静态变量: // 如果在递归函数内声明静态变量,只在第一次执行初始化原创 2020-09-21 17:23:53 · 102 阅读 · 0 评论