diff --git a/README.md b/README.md index d950022..6e4e19d 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ Quick Reference [Markdown](./docs/markdown.md) [MySQL](./docs/mysql.md) [MATLAB](./docs/matlab.md) +[PHP](./docs/php.md) [Python](./docs/python.md) [PostgreSQL](./docs/postgres.md) [Ruby](./docs/ruby.md) diff --git a/docs/cron.md b/docs/cron.md index 8ea5427..282cf1b 100644 --- a/docs/cron.md +++ b/docs/cron.md @@ -92,8 +92,9 @@ Min Hour Day Mon Weekday `问号(?)` | 可以代替“*”并允许用于月份和星期几。使用仅限于 cron 表达式中的 `月份中的某天` 或 `星期几`。 -## Also see +另见 +---- -* [Devhints](https://devhints.io/cron) _(devhints.io)_ -* [Crontab Generator](https://crontab-generator.org/) _(crontab-generator.org)_ -* [Crontab guru](https://crontab.guru/) _(crontab.guru)_ +- [Devhints](https://devhints.io/cron) _(devhints.io)_ +- [Crontab Generator](https://crontab-generator.org/) _(crontab-generator.org)_ +- [Crontab guru](https://crontab.guru/) _(crontab.guru)_ diff --git a/docs/php.md b/docs/php.md new file mode 100644 index 0000000..0547d40 --- /dev/null +++ b/docs/php.md @@ -0,0 +1,972 @@ +PHP 备忘清单 +=== + +这份 [PHP](https://www.php.net/manual/zh/index.php) 备忘单为快速查找最常用代码的正确语法提供了参考 + +入门 +------ + +### hello.php + +```php + +``` + +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 = "quickref.me"; +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 + + +#### vars.php + +```php + +``` + +#### test.php + +```php + 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 + + +```php +$boolean1 = true; +$boolean2 = TRUE; +$boolean3 = false; +$boolean4 = FALSE; +$boolean5 = (boolean) 1; # => true +$boolean6 = (boolean) 0; # => false +``` + +布尔值不区分大小写 + +### 整数 Integer + + +```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 = << 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 数组 +------ + +### 定义 + + +```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 +``` + +### 多类型 + + +```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 + + +```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 中的异常 + + +```php {.wrap} +$nullableValue = null; +try { + $value = $nullableValue ?? throw new InvalidArgumentException(); +} catch (InvalidArgumentException) { // 变量是可选的 + // 处理我的异常 + echo "print me!"; +} +``` + +### 自定义异常 + + +```php +class MyException extends Exception { + // 做一点事 +} +``` + +用法 + +```php +try { + $condition = true; + if ($condition) { + throw new MyException('bala'); + } +} catch (MyException $e) { + // 处理我的异常 +} +``` + +### Nullsafe 运算符 + + +```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 Quickref.me"; +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/php/) _(learnxinyminutes.com)_ diff --git a/docs/postgres.md b/docs/postgres.md index d7c7eb7..4592bed 100644 --- a/docs/postgres.md +++ b/docs/postgres.md @@ -623,7 +623,7 @@ $ sudo systemctl restart postgresql 另见:[复制](https://www.postgresql.org/docs/current/sql-copy.html) -Also see --------- +另见 +---- - [Posgres-cheatsheet](https://gist.github.com/apolloclark/ea5466d5929e63043dcf#posgres-cheatsheet) _(gist.github.com)_ diff --git a/scripts/assets/php.svg b/scripts/assets/php.svg new file mode 100644 index 0000000..d803b40 --- /dev/null +++ b/scripts/assets/php.svg @@ -0,0 +1,3 @@ + + +