973 lines
15 KiB
Markdown
973 lines
15 KiB
Markdown
PHP 备忘清单
|
||
===
|
||
|
||
这份 [PHP](https://www.php.net/manual/zh/index.php) 备忘单为快速查找最常用代码的正确语法提供了参考
|
||
|
||
入门
|
||
------
|
||
|
||
### hello.php
|
||
|
||
```php
|
||
<?php // 以 PHP 开放标签开头
|
||
echo "Hello World\n";
|
||
print("Hello jaywcjlove.github.io");
|
||
?>
|
||
```
|
||
|
||
PHP 运行命令
|
||
|
||
```shell
|
||
$ php hello.php
|
||
```
|
||
|
||
### 变量 Variables
|
||
|
||
```php
|
||
$boolean1 = true;
|
||
$boolean2 = True;
|
||
$int = 12;
|
||
$float = 3.1415926;
|
||
unset($float); // 删除变量
|
||
$str1 = "How are you?";
|
||
$str2 = 'Fine, thanks';
|
||
```
|
||
|
||
查看: [Types](#php-类型)
|
||
|
||
### 字符串 Strings
|
||
|
||
```php
|
||
$url = "jaywcjlove.github.io";
|
||
echo "I'm learning PHP at $url";
|
||
// 连接字符串
|
||
echo "I'm learning PHP at " . $url;
|
||
$hello = "Hello, ";
|
||
$hello .= "World!";
|
||
echo $hello; # => Hello, World!
|
||
```
|
||
|
||
查看: [Strings](#php-字符串)
|
||
|
||
### 数组 Arrays
|
||
|
||
```php
|
||
$num = [1, 3, 5, 7, 9];
|
||
$num[5] = 11;
|
||
unset($num[2]); // 删除变量
|
||
print_r($num); # => 1 3 7 9 11
|
||
echo count($num); # => 5
|
||
```
|
||
|
||
查看: [Arrays](#php-数组)
|
||
|
||
### 运算符 Operators
|
||
|
||
```php
|
||
$x = 1;
|
||
$y = 2;
|
||
$sum = $x + $y;
|
||
echo $sum; # => 3
|
||
```
|
||
|
||
查看: [Operators](#php-运算符)
|
||
|
||
### Include
|
||
<!--rehype:wrap-class=row-span-3-->
|
||
|
||
#### vars.php
|
||
|
||
```php
|
||
<?php // 以 PHP 开放标签开头。
|
||
$fruit = 'apple';
|
||
echo "I was imported";
|
||
return 'Anything you like.';
|
||
?>
|
||
```
|
||
|
||
#### test.php
|
||
|
||
```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.
|
||
?>
|
||
```
|
||
|
||
### 功能 Functions
|
||
|
||
```php
|
||
function add($num1, $num2 = 1) {
|
||
return $num1 + $num2;
|
||
}
|
||
echo add(10); # => 11
|
||
echo add(10, 5); # => 15
|
||
```
|
||
|
||
查看: [Functions](#php-函数)
|
||
|
||
### 注释 Comments
|
||
|
||
```php
|
||
# 这是一个单行 shell 样式的注释
|
||
// 这是一行 c++ 风格的注释
|
||
/* 这是一个多行注释
|
||
另一行注释 */
|
||
```
|
||
|
||
### 常数 Constants
|
||
|
||
```php
|
||
const MY_CONST = "hello";
|
||
echo MY_CONST; # => hello
|
||
|
||
# => MY_CONST is: hello
|
||
echo 'MY_CONST is: ' . MY_CONST;
|
||
```
|
||
|
||
### 类 Classes
|
||
|
||
```php
|
||
class Student {
|
||
public function __construct($name) {
|
||
$this->name = $name;
|
||
}
|
||
}
|
||
$alex = new Student("Alex");
|
||
```
|
||
|
||
查看: [Classes](#php-类)
|
||
|
||
PHP 类型
|
||
------
|
||
|
||
### 布尔值 Boolean
|
||
<!--rehype:wrap-class=row-span-2-->
|
||
|
||
```php
|
||
$boolean1 = true;
|
||
$boolean2 = TRUE;
|
||
$boolean3 = false;
|
||
$boolean4 = FALSE;
|
||
$boolean5 = (boolean) 1; # => true
|
||
$boolean6 = (boolean) 0; # => false
|
||
```
|
||
|
||
布尔值不区分大小写
|
||
|
||
### 整数 Integer
|
||
<!--rehype:wrap-class=row-span-2-->
|
||
|
||
```php
|
||
$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](https://www.php.net/manual/en/language.types.integer.php)
|
||
|
||
### 字符串 Strings
|
||
|
||
```php
|
||
echo 'this is a simple string';
|
||
```
|
||
|
||
查看: [Strings](#php-字符串)
|
||
|
||
### 数组 Arrays
|
||
|
||
```php
|
||
$arr = array("hello", "world", "!");
|
||
```
|
||
|
||
查看: [Arrays](#php-数组)
|
||
|
||
### 浮点数 Float (Double)
|
||
|
||
```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"; # => -1299
|
||
```
|
||
|
||
### Null
|
||
|
||
```php
|
||
$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
|
||
```
|
||
|
||
### 可迭代对象 Iterables
|
||
|
||
```php
|
||
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
|
||
|
||
```php
|
||
# => '$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-line
|
||
|
||
```php
|
||
$str = "foo";
|
||
// 未插值的多行
|
||
$nowdoc = <<<'END'
|
||
Multi line string
|
||
$str
|
||
END;
|
||
// 将执行字符串插值
|
||
$heredoc = <<<END
|
||
Multi line
|
||
$str
|
||
END;
|
||
```
|
||
|
||
### 操作 Manipulation
|
||
|
||
```php
|
||
$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
|
||
```
|
||
|
||
另见: [字符串函数](https://www.php.net/manual/en/ref.strings.php)
|
||
|
||
PHP 数组
|
||
------
|
||
|
||
### 定义
|
||
<!--rehype:wrap-class=row-span-2-->
|
||
|
||
```php
|
||
$a1 = ["hello", "world", "!"]
|
||
$a2 = array("hello", "world", "!");
|
||
$a3 = explode(",", "apple,pear,peach");
|
||
```
|
||
|
||
#### 混合 int 和 string 键
|
||
|
||
```php
|
||
$array = array(
|
||
"foo" => "bar",
|
||
"bar" => "foo",
|
||
100 => -100,
|
||
-100 => 100,
|
||
);
|
||
var_dump($array);
|
||
```
|
||
|
||
#### 短数组语法
|
||
|
||
```php
|
||
$array = [
|
||
"foo" => "bar",
|
||
"bar" => "foo",
|
||
];
|
||
```
|
||
|
||
### 多阵列
|
||
|
||
```php
|
||
$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
|
||
```
|
||
|
||
### 多类型
|
||
<!--rehype:wrap-class=row-span-2-->
|
||
|
||
```php
|
||
$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"]);
|
||
```
|
||
|
||
### 操作
|
||
|
||
```php
|
||
$arr = array(5 => 1, 12 => 2);
|
||
$arr[] = 56; // 附加
|
||
$arr["x"] = 42; // 用键添加
|
||
sort($arr); // 排序
|
||
unset($arr[5]); // 消除
|
||
unset($arr); // 移除所有
|
||
```
|
||
|
||
查看: [数组函数](https://www.php.net/manual/en/ref.array.php)
|
||
|
||
### 索引迭代
|
||
|
||
```php
|
||
$array = array('a', 'b', 'c');
|
||
$count = count($array);
|
||
for ($i = 0; $i < $count; $i++) {
|
||
echo "i:{$i}, v:{$array[$i]}\n";
|
||
}
|
||
```
|
||
|
||
### 价值迭代
|
||
|
||
```php
|
||
$colors = array('red', 'blue', 'green');
|
||
foreach ($colors as $color) {
|
||
echo "Do you like $color?\n";
|
||
}
|
||
```
|
||
|
||
### 关键迭代
|
||
|
||
```php
|
||
$arr = ["foo" => "bar", "bar" => "foo"];
|
||
foreach ( $arr as $key => $value )
|
||
{
|
||
echo "key: " . $key . "\n";
|
||
echo "val: {$arr[$key]}\n";
|
||
}
|
||
```
|
||
|
||
### 串联阵列
|
||
|
||
```php
|
||
$a = [1, 2];
|
||
$b = [3, 4];
|
||
// PHP 7.4 以后
|
||
# => [1, 2, 3, 4]
|
||
$result = [...$a, ...$b];
|
||
```
|
||
|
||
### Into 函数
|
||
|
||
```php
|
||
$array = [1, 2];
|
||
function foo(int $a, int $b) {
|
||
echo $a; # => 1
|
||
echo $b; # => 2
|
||
}
|
||
foo(...$array);
|
||
```
|
||
|
||
### Splat运算符
|
||
|
||
```php
|
||
function foo($first, ...$other) {
|
||
var_dump($first); # => a
|
||
var_dump($other); # => ['b', 'c']
|
||
}
|
||
foo('a', 'b', 'c' /*, ...*/ );
|
||
// 或
|
||
function foo($first, string ...$other){}
|
||
```
|
||
|
||
PHP 运算符
|
||
-------
|
||
|
||
### 算术
|
||
|
||
:- | -
|
||
:- | -
|
||
`+` | 添加
|
||
`-` | 减法
|
||
`*` | 乘法
|
||
`/` | 分配
|
||
`%` | 取模
|
||
`**` | 求幂
|
||
|
||
### 分配
|
||
|
||
:- | -
|
||
:- | -
|
||
`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`
|
||
|
||
### 比较
|
||
|
||
:- | -
|
||
:- | -
|
||
`==` | 平等的
|
||
`===` | 完全相同的
|
||
`!=` | 不相等
|
||
`<>` | 不相等
|
||
`!==` | 不相同
|
||
`<` | 少于
|
||
`>` | 比...更棒
|
||
`<=` | 小于或等于
|
||
`>=` | 大于或等于
|
||
`<=>` | 小于/等于/大于
|
||
|
||
### 逻辑的
|
||
|
||
:- | -
|
||
:- | -
|
||
`and` | 和
|
||
`or` | 或者
|
||
`xor` | 独家或
|
||
`!` | 不是
|
||
`&&` | 和
|
||
`\|\|` | 或者
|
||
|
||
### 算术
|
||
|
||
```php
|
||
// 算术
|
||
$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
|
||
```
|
||
|
||
### 按位
|
||
|
||
:- | -
|
||
:- | -
|
||
`&` | 和
|
||
`|` | 或(包括或)
|
||
`^` | 异或(异或)
|
||
`~` | 不是
|
||
`<<` | 左移
|
||
`>>` | 右移
|
||
|
||
PHP 条件
|
||
------
|
||
|
||
### If elseif else
|
||
|
||
```php
|
||
$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";
|
||
}
|
||
```
|
||
|
||
### Switch
|
||
|
||
```php
|
||
$x = 0;
|
||
switch ($x) {
|
||
case '0':
|
||
print "it's zero";
|
||
break;
|
||
case 'two':
|
||
case 'three':
|
||
// do something
|
||
break;
|
||
default:
|
||
// do something
|
||
}
|
||
```
|
||
|
||
### 三元运算符
|
||
|
||
```php
|
||
# => 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';
|
||
```
|
||
|
||
### 匹配
|
||
|
||
```php
|
||
$statusCode = 500;
|
||
$message = match($statusCode) {
|
||
200, 300 => null,
|
||
400 => '未找到',
|
||
500 => '服务器错误',
|
||
default => '已知状态码',
|
||
};
|
||
echo $message; # => 服务器错误
|
||
```
|
||
|
||
查看: [Match](https://www.php.net/manual/en/control-structures.match.php)
|
||
|
||
### 匹配表达式
|
||
|
||
```php
|
||
$age = 23;
|
||
$result = match (true) {
|
||
$age >= 65 => 'senior',
|
||
$age >= 25 => 'adult',
|
||
$age >= 18 => 'young adult',
|
||
default => 'kid',
|
||
};
|
||
echo $result; # => young adult
|
||
```
|
||
|
||
PHP 循环
|
||
------
|
||
|
||
### while 循环
|
||
|
||
```php
|
||
$i = 1;
|
||
# => 12345
|
||
while ($i <= 5) {
|
||
echo $i++;
|
||
}
|
||
```
|
||
|
||
### do while 循环
|
||
|
||
```php
|
||
$i = 1;
|
||
# => 12345
|
||
do {
|
||
echo $i++;
|
||
} while ($i <= 5);
|
||
```
|
||
|
||
### for i 循环
|
||
|
||
```php
|
||
# => 12345
|
||
for ($i = 1; $i <= 5; $i++) {
|
||
echo $i;
|
||
}
|
||
```
|
||
|
||
### break 跳出循环
|
||
|
||
```php
|
||
# => 123
|
||
for ($i = 1; $i <= 5; $i++) {
|
||
if ($i === 4) {
|
||
break;
|
||
}
|
||
echo $i;
|
||
}
|
||
```
|
||
|
||
### continue 继续
|
||
|
||
```php
|
||
# => 1235
|
||
for ($i = 1; $i <= 5; $i++) {
|
||
if ($i === 4) {
|
||
continue;
|
||
}
|
||
echo $i;
|
||
}
|
||
```
|
||
|
||
### foreach 循环
|
||
|
||
```php
|
||
$a = ['foo' => 1, 'bar' => 2];
|
||
# => 12
|
||
foreach ($a as $k) {
|
||
echo $k;
|
||
}
|
||
```
|
||
|
||
查看: [Array iteration](#关键迭代)
|
||
|
||
PHP 函数
|
||
------
|
||
|
||
### 返回值
|
||
|
||
```php
|
||
function square($x)
|
||
{
|
||
return $x * $x;
|
||
}
|
||
echo square(4); # => 16
|
||
```
|
||
|
||
### 返回类型
|
||
|
||
```php
|
||
// 基本返回类型声明
|
||
function sum($a, $b): float {/*...*/}
|
||
function get_item(): string {/*...*/}
|
||
class C {}
|
||
// 返回一个对象
|
||
function getC(): C { return new C; }
|
||
```
|
||
|
||
### 可空返回类型
|
||
|
||
```php
|
||
// 在 PHP 7.1 中可用
|
||
function nullOrString(int $v) : ?string
|
||
{
|
||
return $v % 2 ? "odd" : null;
|
||
}
|
||
echo nullOrString(3); # => odd
|
||
var_dump(nullOrString(4)); # => NULL
|
||
```
|
||
|
||
查看: [Nullable types](https://www.php.net/manual/en/migration71.new-features.php)
|
||
|
||
### 无效函数
|
||
|
||
```php
|
||
// 在 PHP 7.1 中可用
|
||
function voidFunction(): void
|
||
{
|
||
echo 'Hello';
|
||
return;
|
||
}
|
||
voidFunction(); # => Hello
|
||
```
|
||
|
||
### 变量函数
|
||
|
||
```php
|
||
function bar($arg = '')
|
||
{
|
||
echo "In bar(); arg: '$arg'.\n";
|
||
}
|
||
$func = 'bar';
|
||
$func('test'); # => In bar(); arg: test
|
||
```
|
||
|
||
### 匿名函数
|
||
|
||
```php
|
||
$greet = function($name)
|
||
{
|
||
printf("Hello %s\r\n", $name);
|
||
};
|
||
$greet('World'); # => Hello World
|
||
$greet('PHP'); # => Hello PHP
|
||
```
|
||
|
||
### 递归函数
|
||
|
||
```php
|
||
function recursion($x)
|
||
{
|
||
if ($x < 5) {
|
||
echo "$x";
|
||
recursion($x + 1);
|
||
}
|
||
}
|
||
recursion(1); # => 1234
|
||
```
|
||
|
||
### 默认参数
|
||
|
||
```php
|
||
function coffee($type = "cappuccino")
|
||
{
|
||
return "Making a cup of $type.\n";
|
||
}
|
||
# => 制作一杯卡布奇诺
|
||
echo coffee();
|
||
# => 制作一杯
|
||
echo coffee(null);
|
||
# => 制作一杯浓缩咖啡
|
||
echo coffee("espresso");
|
||
```
|
||
|
||
### 箭头函数
|
||
|
||
```php
|
||
$y = 1;
|
||
|
||
$fn1 = fn($x) => $x + $y;
|
||
// 相当于按值使用 $y:
|
||
$fn2 = function ($x) use ($y) {
|
||
return $x + $y;
|
||
};
|
||
echo $fn1(5); # => 6
|
||
echo $fn2(5); # => 6
|
||
```
|
||
|
||
PHP 类
|
||
------
|
||
|
||
### 构造函数 Constructor
|
||
|
||
```php
|
||
class Student {
|
||
public function __construct($name) {
|
||
$this->name = $name;
|
||
}
|
||
public function print() {
|
||
echo "Name: " . $this->name;
|
||
}
|
||
}
|
||
$alex = new Student("Alex");
|
||
$alex->print(); # => Name: Alex
|
||
```
|
||
|
||
### 继承 Inheritance
|
||
|
||
```php
|
||
class ExtendClass extends SimpleClass
|
||
{
|
||
// 重新定义父方法
|
||
function displayVar()
|
||
{
|
||
echo "Extending class\n";
|
||
parent::displayVar();
|
||
}
|
||
}
|
||
$extended = new ExtendClass();
|
||
$extended->displayVar();
|
||
```
|
||
|
||
### 类变量 Classes variables
|
||
<!--rehype:wrap-class=row-span-2-->
|
||
|
||
```php
|
||
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';
|
||
}
|
||
```
|
||
|
||
静态访问
|
||
|
||
```php
|
||
echo MyClass::MY_CONST; # => value
|
||
echo MyClass::$staticVar; # => static
|
||
```
|
||
|
||
### 魔术方法
|
||
|
||
```php
|
||
class MyClass
|
||
{
|
||
// 对象被视为字符串
|
||
public function __toString()
|
||
{
|
||
return $property;
|
||
}
|
||
// 与 __construct() 相反
|
||
public function __destruct()
|
||
{
|
||
print "Destroying";
|
||
}
|
||
}
|
||
```
|
||
|
||
### 接口
|
||
|
||
```php
|
||
interface Foo
|
||
{
|
||
public function doSomething();
|
||
}
|
||
interface Bar
|
||
{
|
||
public function doSomethingElse();
|
||
}
|
||
class Cls implements Foo, Bar
|
||
{
|
||
public function doSomething() {}
|
||
public function doSomethingElse() {}
|
||
}
|
||
```
|
||
|
||
各种各样的
|
||
------
|
||
|
||
### 基本错误处理
|
||
|
||
```php
|
||
try {
|
||
// 做一点事
|
||
} catch (Exception $e) {
|
||
// 处理异常
|
||
} finally {
|
||
echo "Always print!";
|
||
}
|
||
```
|
||
|
||
### PHP 8.0 中的异常
|
||
|
||
<!--rehype:wrap-class=col-span-2-->
|
||
```php {.wrap}
|
||
$nullableValue = null;
|
||
try {
|
||
$value = $nullableValue ?? throw new InvalidArgumentException();
|
||
} catch (InvalidArgumentException) { // 变量是可选的
|
||
// 处理我的异常
|
||
echo "print me!";
|
||
}
|
||
```
|
||
|
||
### 自定义异常
|
||
|
||
<!--rehype:wrap-class=row-span-2-->
|
||
```php
|
||
class MyException extends Exception {
|
||
// 做一点事
|
||
}
|
||
```
|
||
|
||
用法
|
||
|
||
```php
|
||
try {
|
||
$condition = true;
|
||
if ($condition) {
|
||
throw new MyException('bala');
|
||
}
|
||
} catch (MyException $e) {
|
||
// 处理我的异常
|
||
}
|
||
```
|
||
|
||
### Nullsafe 运算符
|
||
<!--rehype:wrap-class=row-span-2-->
|
||
|
||
```php
|
||
// 从 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 运算符](https://wiki.php.net/rfc/nullsafe_operator)
|
||
|
||
### 常用表达
|
||
|
||
```php
|
||
$str = "Visit jaywcjlove.github.io";
|
||
echo preg_match("/qu/i", $str); # => 1
|
||
```
|
||
|
||
查看: [PHP中的正则表达式](./regex.md#php中的正则表达式)
|
||
|
||
### fopen() 模式
|
||
|
||
:- | -
|
||
:- | -
|
||
`r` | 读
|
||
`r+` | 读写,前置
|
||
`w` | 写入,截断
|
||
`w+` | 读写,截断
|
||
`a` | 写,追加
|
||
`a+` | 读写,追加
|
||
|
||
### 运行时定义的常量
|
||
|
||
```php
|
||
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;
|
||
```
|
||
|
||
另见
|
||
----
|
||
|
||
- [PHP 官方中文文档](https://www.php.net/manual/zh/index.php) _(php.net)_
|
||
- [Learn X in Y minutes](https://learnxinyminutes.com/docs/zh-cn/php-cn/) _(learnxinyminutes.com)_
|