共计 4217 个字符,预计需要花费 11 分钟才能阅读完成。
官网
PHP 官网:https://www.php.net/
文档下载:https://www.php.net/distributions/manual/php_enhanced_zh.chm
echo 和 print
- echo 能够输出一个以上的字符串,逗号隔开
- print 只能输出一个字符串,并始终返回 1
- echo 比 print 稍快,并且开销低
CLI
PHP CLI 是 PHP 语言的命令行解释器。
<?php
echo '请输入内容:';
$input = fgets(STDIN);
echo '输入内容是:' . $input;
执行脚本:php test.php
。
交互式 Shell
$ php -a
Interactive shell
php > echo PHP_OS;
WINNT
php > echo PHP_VERSION;
7.3.4
数据类型
用 var_dump($a);
会返回变量的数据类型和值,一般开发调试时使用,只获取数据类型用echo gettype($a);
。
字符串
<?php
$s = 'abc';
echo '$s'; //$s
echo "$s"; //abc
echo "hello $s 123"; //hello abc 123
echo "hello {$s} 123"; //hello abc 123
Resource 资源类型
<?php
$handle = fopen('test.txt', 'r');
var_dump($handle); //resource(5) of type (stream)
echo is_resource($handle); //1
echo gettype($handle); //resource
echo get_resource_type($handle); //stream
$content = fread($handle, filesize('test.txt'));
echo $content;
fclose($handle);
EOF(heredoc)定界符
以 <<<EOF 标记开始,以 EOF 标记结束,结束标记必须顶头写,独占一行,不能有缩进和空格,结束标记末尾要有分号。
位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。
<?php
$a = '123';
echo <<<EOF
ABC$a abc'd
"ef
EOF;
运算符
算术运算符
<?php
// 整除,参数必须是整数,向下取整,结果 3
$a = intdiv(10, 3);
echo $a;
比较运算符
and 和 &&,or 和 || 的区别主要体现在优先级:&& 的优先级比 and 高,|| 的优先级比 or 高。
空合并运算符
PHP 7 新特性,用于简化处理可能为 null 的变量或数组元素的情况。它的作用是判断一个变量是否未定义或者为 null,是则返回指定的默认值,否则返回该变量的值。
<?php
$name = $username ?? '我是默认值';
echo $name; // 我是默认值
组合比较符
是一个三向比较运算符,它可以执行两个操作数之间的大于,小于和相等的比较。
<?php
$a = 1;
$b = 2;
$c = $a <=> $b;
echo $c; // -1
如果 $a>$b 则 $c=1;如果 $a==$b 则 $c=0;如果 $a<$b 则 $c=-1。
常量
常量被定义后,在脚本的其他任何地方都不能被改变,严格区分大小写,但无需 $ 符。
<?php
define('PI', 3.14); // 第一种定义
const PI2 = 3.14; // 第二种定义
echo PI;
echo PHP_EOL;
echo PI2;
const 和 define 的区别:
- const 不能在条件语句中定义常量
- const 可在类中使用,define 不能
获取所有常量:
<?php
define('PI', 3.14);
$a = get_defined_constants(true); // 获取所有常量
print_r($a);
print_r($a['user']);
魔术常量
它的值随着它在代码中的位置改变而改变。
- __LINE__:获取文件中的当前行号
- __FILE__:获取文件的完整路径和文件名
- __DIR__:获取文件所在目录
- __FUNCTION__:获取函数被定义时的名称
- __CLASS__:获取类被定义时的名称
- __METHOD__:包含了:命名空间 类名 方法名
- __NAMESPACE__:当前命名空间的名称
- __TRAIT__:当前使用的 Trait 名称
- PHP_EOL:即
\n
变量
unset()函数用于销毁给定的变量。
<?php
$a = 1;
unset($a);
var_dump($a); // NULL
在函数中不能 unset()全局变量,想在函数中 unset()全局变量,可使用 $GLOBALS 数组来实现:
<?php
$a = 1;
function test() {unset($GLOBALS['a']);
}
test();
var_dump($a); // NULL
isset()函数用于判断变量是否被定义并且非 NULL。
empty()函数对于未定义的变量也会返回 true,因此在使用该函数之前,应该确保变量已经被定义。
超全局变量
$GLOBALS 是一个包含全部变量的全局组合数组,变量的名字就是数组的键。
$_SERVER 是一个包含诸如头信息 (header)、路径(path)、以及脚本位置(script locations) 等信息的数组。
$_REQUEST 变量包含了 $_GET、$_POST 和 $_COOKIE 的内容。
可变变量
<?php
$a = 'test';
$$a = 'test2'; // 即 $test
$$$a = 'test3';
echo $a;
echo PHP_EOL;
echo $test; // test2
echo PHP_EOL;
echo $test2; // test3
传址
<?php
$a = 1;
$b = &$a;
$b = 2;
echo $a; //2
echo $b; //2
数组
索引数组
<?php
$arr = ['a', 'b', 'c'];
print_r($arr);
print_r($arr[1]);
关联数组
<?php
$age = ['张三' => 18, '李四' => 19, '王五' => 20];
print_r($age);
print_r($age['张三']);
// 获取数组长度
echo PHP_EOL . count($age);
遍历数组
<?php
$age = ['张三' => 18, '李四' => 19, '王五' => 20];
foreach ($age as $value) {echo $value . PHP_EOL;}
foreach ($age as $key => $value) {echo $key . ':' . $value . PHP_EOL;}
list()
<?php
$arr = ['a', 'b', 'c'];
list($a,, $c) = $arr;
echo $a; //a
echo $c; //c
$arr2 = ['a' => 'a2', 'b' => 'b2', 'c' => 'c2'];
list('a' => $a2, 'c' => $c2) = $arr2;
echo $a2; //a2
echo $c2; //c2
数组运算符
只会保留第一个数组中的键值对,而忽略后面数组中相同键名的元素,如果想要合并两个数组并覆盖相同键名的元素,可以使用 array_merge()函数。
<?php
$arr = ['a' => 1, 'b' => 2];
$arr2 = ['b' => 'b', 'c' => 3, 'd' => 4];
print_r($arr + $arr2);
print_r($arr2 + $arr);
print_r(array_merge($arr, $arr2));
通过指针读取数组元素
<?php
$arr = ['a', 'b', 'c'];
echo current($arr); //a
echo key($arr); // 数组下标 0
echo next($arr); //b
echo prev($arr); //a
函数
<?php
function nowTime($type = 'time') {if ($type == 'time') {echo date('Y-m-d H:i:s');
} else if ($type == 'day') {echo date('Y-m-d');
}
}
nowTime();
严格模式
<?php
// 开启严格模式
declare(strict_types=1);
function plus(int $a, int $b) {echo $a + $b;}
plus(2, 3);
// plus('2', 3);
变量作用域
函数内部声明的变量是局部变量,仅能在函数内部访问;函数外部声明的变量是全局变量,除了函数外,可以被脚本中的任何部分访问,要在一个函数中访问全局变量,需要使用 global 关键字。
<?php
$a = 123;
function test() {
global $a;
echo $a;
}
test();
static 作用域
当一个函数完成时,它的所有变量通常都会被删除。若想某个局部变量不要被删除,可在第一次声明变量时使用 static 关键字。
每次调用该函数时,该变量将会保留着函数前一次被调用时的值,但是该变量仍然是函数的局部变量。
<?php
function test() {
static $a = 0;
echo $a . PHP_EOL;
$a++;
}
test(); // 0
test(); // 1
test(); // 2
函数所有参数
<?php
function test() {$args = func_get_args();
$numArgs = func_num_args();
print_r($args);
print_r($numArgs);
}
test(1, 2, 3);
htmlspecialchars()函数
用于将字符串中的特殊字符转换为 HTML 实体,以避免在 HTML 文档中引起解析错误或安全漏洞。
包含文件
include 和 require 语句
include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的。
- require 生成一个致命错误 (E_COMPILE_ERROR),在错误发生后脚本会停止执行
- include 生成一个警告 (E_WARNING),在错误发生后脚本会继续执行
include_once 和 require_once 语句
和上面的一样,但只会调用一次,防止重复调用。
at 符 @
include 前加 at 符 @可用于屏蔽错误信息。
GET 和 POST
GET 传输的最大容量通常不超过 2048 个字符(即 2KB),POST 对发送信息的量没有限制 (默认 POST 发送的最大值为 8 MB,但可通过设置 php.ini 的 post_max_size 进行更改;发送的变量数最大值 max_input_vars)。