ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PHP 备忘清单(速查表)详解:从基础语法到 PHP 8 新特性

PHP 备忘清单(速查表)详解:从基础语法到 PHP 8 新特性 文档知识库教程开发工具【免费下载链接】reference为开发人员分享快速参考备忘清单(速查表)项目地址https://gitcode.com/jaywcjlove/reference点击查看免费下载本篇指南以 docs/php.md 为骨架系统梳理 PHP 的核心语法体系变量与类型、字符串与数组操作、运算符、条件与循环、函数与类的高级写法以及异常处理、Nullsafe 运算符等 PHP 7.4 / 8.0 新特性。读完本文你将拥有一份可快速查阅、可直接复制运行的 PHP 实战速查手册并能在项目开发中熟练运用 match 表达式、箭头函数、可空返回类型等现代 PHP 能力。入门hello.phpPHP 代码以?php开放标签开头echo与print都可用于输出内容区别在于echo没有返回值且支持逗号分隔多参数print始终返回 1?php // 以 PHP 开放标签开头 echo Hello World\n; print(Hello jaywcjlove.github.io); ?将上述内容保存为hello.php后在终端运行$ php hello.php变量 VariablesPHP 变量以$符号开头无需显式声明类型即可赋值unset()用于删除变量释放其引用$boolean1 true; $boolean2 True; $int 12; $float 3.1415926; unset($float); // 删除变量 $str1 How are you?; $str2 Fine, thanks;变量名区分大小写布尔值与关键字不区分大小写。查看: Types字符串 Strings双引号字符串会解析其中的变量插值单引号字符串不会.是字符串连接运算符.是连接赋值运算符$url jaywcjlove.github.io; echo Im learning PHP at $url; // 连接字符串 echo Im learning PHP at . $url; $hello Hello, ; $hello . World!; echo $hello; # Hello, World!查看: Strings数组 ArraysPHP 数组本质是有序映射表Map[]与array()两种语法等价unset()删除指定键count()返回元素个数$num [1, 3, 5, 7, 9]; $num[5] 11; unset($num[2]); // 删除变量 print_r($num); # 1 3 7 9 11 echo count($num); # 5注意删除键后数组索引不会自动重排count()反映的是剩余元素数量。查看: Arrays运算符 Operators$x 1; $y 2; $sum $x $y; echo $sum; # 3查看: OperatorsIncludeinclude与require用于在脚本中引入其他文件require在文件缺失时产生致命错误E_COMPILE_ERRORinclude仅产生警告E_WARNING后继续执行二者也都支持函数式写法与返回值捕获vars.php?php // 以 PHP 开放标签开头。 $fruit apple; echo I was imported; return Anything you like.; ?test.php?php include vars.php; echo $fruit . \n; # apple /* 与 include 相同 如果不能包含则导致错误*/ require vars.php; // 也有效 include(vars.php); require(vars.php); // 通过 HTTP 包含 include http://x.com/file.php; // 包含和返回语句 $result include vars.php; echo $result; # Anything you like. ?说明通过 HTTP 包含远程文件依赖allow_url_include配置且存在安全风险生产环境应避免使用被包含文件若含return语句则include表达式的结果即为该返回值。功能 Functions函数参数可以设置默认值未传参时使用默认值function add($num1, $num2 1) { return $num1 $num2; } echo add(10); # 11 echo add(10, 5); # 15查看: Functions注释 CommentsPHP 支持三种注释风格# 这是一个单行 shell 样式的注释 // 这是一行 c 风格的注释 /* 这是一个多行注释 另一行注释 */常数 Constantsconst在编译期定义适合类常量与全局常量echo MY_CONST直接输出常量值字符串拼接时同样生效const MY_CONST hello; echo MY_CONST; # hello # MY_CONST is: hello echo MY_CONST is: . MY_CONST;类 Classes__construct()是构造函数$this指向当前实例class Student { public function __construct($name) { $this-name $name; } } $alex new Student(Alex);查看: ClassesPHP 类型布尔值 Booleantrue/false不区分大小写也可用强制类型转换(boolean)将其他值转为布尔$boolean1 true; $boolean2 TRUE; $boolean3 false; $boolean4 FALSE; $boolean5 (boolean) 1; # true $boolean6 (boolean) 0; # false布尔值不区分大小写。空字符串、0、0、0.0、[]、null在布尔上下文中均为false。整数 Integer支持十进制、八进制前缀0、十六进制前缀0x、二进制前缀0b以及自 PHP 7.4.0 起支持的数字分隔符_$int1 28; # 28 $int2 -32; # -32 $int3 012; # 10 (octal) $int4 0x0F; # 15 (hex) $int5 0b101; # 5 (binary) # 2000100000 (decimal, PHP 7.4.0) $int6 2_000_100_000;另见: Integers字符串 Stringsecho this is a simple string;查看: Strings数组 Arrays$arr array(hello, world, !);查看: Arrays浮点数 Float (Double)支持科学计数法e/E与数字分隔符PHP 会在数值上下文自动将数字字符串转换为数字参与运算$float1 1.234; $float2 1.2e7; $float3 7E-10; $float4 1_234.567; // as of PHP 7.4.0 var_dump($float4); // float(1234.567) $float5 1 10.5; # 11.5 $float6 1 -1.3e3; # -1299Nullnull表示变量无值??为 null 合并运算符左侧为null时返回右侧与的区别在于后者同时比较类型$a null; $b Hello php!; echo $a ?? a is unset; # a is unset echo $b ?? b is unset; # Hello php $a array(); $a null # true $a null # false is_null($a) # false空数组 null为true但 null为false说明会做类型宽松比较。可迭代对象 Iterablesiterable类型PHP 7.1可接受数组或实现了Traversable的对象常与生成器yield配合function bar(): iterable { return [1, 2, 3]; } function gen(): iterable { yield 1; yield 2; yield 3; } foreach (bar() as $value) { echo $value; # 123 }PHP 字符串字符串 String单引号字符串不解析变量、不处理转义序列\n、\t按字面输出双引号字符串会解析变量与转义序列# $String $sgl_quotes $String; # This is a $String. $dbl_quotes This is a $sgl_quotes.; # a tab character. $escaped a \t tab character.; # a slash and a t: \t $unescaped a slash and a t: \t;多行 Multi-lineNowdocEND不执行插值HeredocEND会执行变量插值适合书写大段文本$str foo; // 未插值的多行 $nowdoc END Multi line string $str END; // 将执行字符串插值 $heredoc END Multi line $str END;操作 Manipulation常用字符串函数strlen()长度、substr()截取支持负偏移从尾部计数、strtoupper()/strtolower()大小写、strpos()查找子串位置找不到返回false注意与0的严格比较$s Hello Phper; echo strlen($s); # 11 echo substr($s, 0, 3); # Hel echo substr($s, 1); # ello Phper echo substr($s, -4, 3);# hpe echo strtoupper($s); # HELLO PHPER echo strtolower($s); # hello phper echo strpos($s, l); # 2 var_dump(strpos($s, L)); # false另见: 字符串函数PHP 数组定义[]短数组语法与array()等价explode()按分隔符拆分为数组$a1 [hello, world, !] $a2 array(hello, world, !); $a3 explode(,, apple,pear,peach);混合 int 和 string 键数组键可为整数或字符串二者可混用整数键自动转换如100转为100$array array( foo bar, bar foo, 100 -100, -100 100, ); var_dump($array);短数组语法$array [ foo bar, bar foo, ];多阵列多维数组通过连续下标访问$multiArray [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ]; print_r($multiArray[0][0]) # 1 print_r($multiArray[0][1]) # 2 print_r($multiArray[0][2]) # 3多类型同一数组中可混合字符串键、整数键与嵌套数组var_dump()可查看值与类型详情$array array( foo bar, 42 24, multi array( dim array( a foo ) ) ); # string(3) bar var_dump($array[foo]); # int(24) var_dump($array[42]); # string(3) foo var_dump($array[multi][dim][a]);操作$arr[] value自动追加键为当前最大整数键 1sort()排序会重置键unset()删除键或整个数组$arr array(5 1, 12 2); $arr[] 56; // 附加 $arr[x] 42; // 用键添加 sort($arr); // 排序 unset($arr[5]); // 消除 unset($arr); // 移除所有查看: 数组函数索引迭代$array array(a, b, c); $count count($array); for ($i 0; $i $count; $i) { echo i:{$i}, v:{$array[$i]}\n; }价值迭代$colors array(red, blue, green); foreach ($colors as $color) { echo Do you like $color?\n; }关键迭代foreach ($arr as $key $value)同时取出键与值$arr [foo bar, bar foo]; foreach ( $arr as $key $value ) { echo key: . $key . \n; echo val: {$arr[$key]}\n; }串联阵列自 PHP 7.4 起可使用展开运算符...合并数组支持字符串键时行为略有不同整数键会重新编号$a [1, 2]; $b [3, 4]; // PHP 7.4 以后 # [1, 2, 3, 4] $result [...$a, ...$b];Into 函数参数解包Argument unpacking...$array将数组元素按顺序展开为函数实参$array [1, 2]; function foo(int $a, int $b) { echo $a; # 1 echo $b; # 2 } foo(...$array);Splat运算符可变参数Variadic...$other收集剩余实参为数组可与类型声明组合使用function foo($first, ...$other) { var_dump($first); # a var_dump($other); # [b, c] } foo(a, b, c /*, ...*/ ); // 或 function foo($first, string ...$other){}PHP 运算符算术| 运算符 | 说明 | | :- | - | || 添加 | |-| 减法 | |*| 乘法 | |/| 分配除法 | |%| 取模 | |**| 求幂PHP 5.6 |分配| 运算符 | 说明 | | :- | - | |a b| 如同a a b| |a - b| 如同a a – b| |a * b| 如同a a * b| |a / b| 如同a a / b| |a % b| 如同a a % b|比较| 运算符 | 说明 | | :- | - | || 平等的宽松比较 | || 完全相同的严格比较含类型 | |!| 不相等 | || 不相等与!等价 | |!| 不相同 | || 少于 | || 比...更棒大于 | || 小于或等于 | || 大于或等于 | || 小于/等于/大于太空船运算符返回 -1/0/1 |逻辑的| 运算符 | 说明 | | :- | - | |and| 和优先级低于 | |or| 或者优先级低于 | |xor| 独家或异或 | |!| 不是逻辑非 | || 和优先级高于and | |\|\|| 或者优先级高于or |实战提示and/or的优先级低于赋值运算符因此$r true or false实际为($r true) or false需要严格优先级控制时优先使用/||。算术// 算术 $sum 1 1; // 2 $difference 2 - 1; // 1 $product 2 * 2; // 4 $quotient 2 / 1; // 2 // 速记算术 $num 0; $num 1; // 将 $num 增加 1 echo $num; // 打印 1评估后的增量 echo $num; // 打印 3评估前的增量 $num / $float; // 将商除并分配给 $num注意$num先返回后自增与$num先自增后返回的区别。按位| 运算符 | 说明 | | :- | - | || 和按位与 | |\|| 或包括或按位或 | |^| 异或异或 | |~| 不是按位非 | || 左移 | || 右移 |PHP 条件If elseif else$a 10; $b 20; if ($a $b) { echo a is bigger than b; } elseif ($a $b) { echo a is equal to b; } else { echo a is smaller than b; }Switchswitch使用宽松比较多个case可共享同一执行块break用于跳出$x 0; switch ($x) { case 0: print its zero; break; case two: case three: // do something break; default: // do something }三元运算符?:简写形式在条件为假时返回右侧值??则仅在左侧为null时返回右侧# Does print (false ? Not : Does); $x false; # Does print($x ?: Does); $a null; $b Does print; # a is unsert echo $a ?? a is unset; # print echo $b ?? b is unset;匹配match表达式PHP 8.0是switch的严格比较升级版作为表达式返回值无需break支持多条件用逗号合并$statusCode 500; $message match($statusCode) { 200, 300 null, 400 未找到, 500 服务器错误, default 已知状态码, }; echo $message; # 服务器错误查看: Match匹配表达式match (true)模式可替代多分支 if/elseif 链实现区间判断$age 23; $result match (true) { $age 65 senior, $age 25 adult, $age 18 young adult, default kid, }; echo $result; # young adultPHP 循环while 循环$i 1; # 12345 while ($i 5) { echo $i; }do while 循环先执行一次循环体再判断条件因此至少执行一次$i 1; # 12345 do { echo $i; } while ($i 5);for i 循环# 12345 for ($i 1; $i 5; $i) { echo $i; }break 跳出循环break立即终止整个循环# 123 for ($i 1; $i 5; $i) { if ($i 4) { break; } echo $i; }continue 继续continue跳过本次循环剩余代码进入下一次迭代# 1235 for ($i 1; $i 5; $i) { if ($i 4) { continue; } echo $i; }foreach 循环foreach遍历数组时无键版本依次取每个元素的值$a [foo 1, bar 2]; # 12 foreach ($a as $k) { echo $k; }查看: Array iterationPHP 函数返回值function square($x) { return $x * $x; } echo square(4); # 16返回类型PHP 7.0 支持标量返回类型声明7.1 支持对象返回类型// 基本返回类型声明 function sum($a, $b): float {/*...*/} function get_item(): string {/*...*/} class C {} // 返回一个对象 function getC(): C { return new C; }可空返回类型?string表示返回值既可以是string也可以是nullPHP 7.1// 在 PHP 7.1 中可用 function nullOrString(int $v) : ?string { return $v % 2 ? odd : null; } echo nullOrString(3); # odd var_dump(nullOrString(4)); # NULL查看: Nullable types无效函数void表示函数无返回值可省略return或使用无值的return;PHP 7.1// 在 PHP 7.1 中可用 function voidFunction(): void { echo Hello; return; } voidFunction(); # Hello变量函数将函数名字符串赋给变量后直接以变量名调用实现动态派发function bar($arg ) { echo In bar(); arg: $arg.\n; } $func bar; $func(test); # In bar(); arg: test匿名函数闭包Closure可以赋值给变量、作为参数传递$greet function($name) { printf(Hello %s\r\n, $name); }; $greet(World); # Hello World $greet(PHP); # Hello PHP递归函数函数在满足退出条件前不断调用自身function recursion($x) { if ($x 5) { echo $x; recursion($x 1); } } recursion(1); # 1234默认参数未传参时使用默认值显式传入null会覆盖默认值可结合可空类型声明使用function coffee($type cappuccino) { return Making a cup of $type.\n; } # 制作一杯卡布奇诺 echo coffee(); # 制作一杯 echo coffee(null); # 制作一杯浓缩咖啡 echo coffee(espresso);箭头函数箭头函数PHP 7.4自动按值捕获外部变量等价于use按值引入的匿名函数语法更简洁$y 1; $fn1 fn($x) $x $y; // 相当于按值使用 $y $fn2 function ($x) use ($y) { return $x $y; }; echo $fn1(5); # 6 echo $fn2(5); # 6PHP 类构造函数 Constructorclass Student { public function __construct($name) { $this-name $name; } public function print() { echo Name: . $this-name; } } $alex new Student(Alex); $alex-print(); # Name: Alex继承 Inheritanceextends实现继承parent::调用父类方法子类可覆写Override父类方法class ExtendClass extends SimpleClass { // 重新定义父方法 function displayVar() { echo Extending class\n; parent::displayVar(); } } $extended new ExtendClass(); $extended-displayVar();类变量 Classes variables可见性修饰符控制访问范围public公开、protected仅类与子类、private仅限类内static表示类级别共享const定义类常量均通过::访问class MyClass { const MY_CONST value; static $staticVar static; // 可见度 public static $var1 pubs; // 仅限类 private static $var2 pris; // 类和子类 protected static $var3 pros; // 类和子类 protected $var6 pro; // 仅限类 private $var7 pri; }静态访问echo MyClass::MY_CONST; # value echo MyClass::$staticVar; # static魔术方法__toString()定义对象被当作字符串使用时的输出__destruct()在对象销毁时调用与构造函数__construct()对应class MyClass { // 对象被视为字符串 public function __toString() { return $property; } // 与 __construct() 相反 public function __destruct() { print Destroying; } }接口接口定义契约类通过implements实现一个或多个接口必须实现接口声明的所有方法interface Foo { public function doSomething(); } interface Bar { public function doSomethingElse(); } class Cls implements Foo, Bar { public function doSomething() {} public function doSomethingElse() {} }各种各样的基本错误处理try/catch/finallyfinally无论是否抛出异常都会执行try { // 做一点事 } catch (Exception $e) { // 处理异常 } finally { echo Always print!; }PHP 8.0 中的异常PHP 8.0 支持在表达式中直接throw且catch可省略异常变量仅捕获类型$nullableValue null; try { $value $nullableValue ?? throw new InvalidArgumentException(); } catch (InvalidArgumentException) { // 变量是可选的 // 处理我的异常 echo print me!; }自定义异常继承内置Exception类创建自定义异常类型便于按类型分别捕获class MyException extends Exception { // 做一点事 }用法try { $condition true; if ($condition) { throw new MyException(bala); } } catch (MyException $e) { // 处理我的异常 }Nullsafe 运算符Nullsafe 运算符?-PHP 8.0在链式调用中任一环节为null时直接短路返回null避免冗长的逐层判空// 从 PHP 8.0.0 开始这一行 $result $repo?-getUser(5)?-name; // 相当于下面的代码 if (is_null($repo)) { $result null; } else { $user $repository-getUser(5); if (is_null($user)) { $result null; } else { $result $user-name; } }另见: Nullsafe 运算符常用表达preg_match()使用 PCRE 正则匹配返回匹配次数0 或 1$str Visit jaywcjlove.github.io; echo preg_match(/qu/i, $str); # 1查看: PHP中的正则表达式该备忘仓库的 docs/regex.md 中还汇总了 PHP 正则的完整函数族preg_match()匹配、preg_match_all()全局匹配、preg_replace()/preg_replace_callback()替换、preg_split()拆分、preg_grep()过滤数组可直接作为正则开发的补充速查。fopen() 模式fopen()打开文件的模式决定读写方式与文件指针位置| 模式 | 说明 | | :- | - | |r| 读 | |r| 读写前置 | |w| 写入截断 | |w| 读写截断 | |a| 写追加 | |a| 读写追加 |运行时定义的常量define()在运行时定义常量可用于依赖动态计算值如日期的常量define(CURRENT_DATE, date(Y-m-d)); // 一种可能的表示 echo CURRENT_DATE; # 2021-01-05 # CURRENT_DATE is: 2021-01-05 echo CURRENT_DATE is: . CURRENT_DATE;另见本备忘清单在项目中的入口README.md 中的 PHP 速查卡片与 PHP 正则相关的完整速查见 docs/regex.mdPHP 中的正则表达式一节PHP 官方中文文档(php.net)Learn X in Y minutes(learnxinyminutes.com)赞分享文档知识库教程开发工具【免费下载链接】reference为开发人员分享快速参考备忘清单(速查表)项目地址https://gitcode.com/jaywcjlove/reference点击查看免费下载相关推荐PHP 语法速查手册Quick Reference 项目 PHP 备忘清单完整解析PHP 语法速查手册Quick Reference 项目 PHP 备忘清单完整解析 本篇技术指南以本仓库 docs/php.md https://link.g文档教程Markdown 语法速查指南从基础语法到 GitHub 风格扩展的完整备忘清单Markdown 语法速查指南从基础语法到 GitHub 风格扩展的完整备忘清单 本文基于 Quick Reference 项目中的 docs/markdow文档教程Pytorch 备忘清单从张量基础语法到 CUDA 与模型导出的开发速查Pytorch 备忘清单从张量基础语法到 CUDA 与模型导出的开发速查 本文是基于本仓库 docs/pytorch.md https://link.gitc文档教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表