数据表达
基本语法
// 标记<?php?><script language="php"></script><?// 需要在php.ini中开启short_open_tag=on?>echo date('当前时间是:Y-m-d H:i:s 星期w'); // 分号结束,echo输出,斜杠注释phpinfo(); // php执行环境
变量
/** 变量,区分大小写,可使用字母、数字、下划线、非关键字* var_dump用于显示变量的完整信息* isset用于判断变量是否存值* unset用于销毁变量,断开变量名与数据之间的关系*/$var = 1;var_dump(isset($var));unset($var);$varOld = 1;$varValNew = $varOld; // 值传递$varNew = &$varOld; // 引用传递$varOld = 0;echo $varOld, $varValNew, $varNew/** 预定义变量,超全局变量* $_GET:存储使用GET方法提交过来的数据* $_POST:存储使用POST方法提交过来的数据* $_REQUEST:$_GET和$_POST的合集* $_SERVER:请求中的系统信息* $GLOBALS:存储了所有自定义的全局变量的数组*/echo $_SERVER["PHP_SELF"]; // 网页地址,不含域名echo $_SERVER["REMOTE_ADDR"]; // 客户端IPecho $_SERVER["SERVER_NAME"]; // 服务器名echo $_SERVER["SERVER_ADDR"]; // 服务器IPecho $_SERVER["DOCUMENT_ROOT"]; // 网站文件夹路径echo $_SERVER["SCRIPT_NAME"]; // 当前网页地址$varRaw = 1;$varStrRaw = 'varRaw';echo $$varStrRaw; // 可变变量
常量
常量只能存储简单数据类型,且不可变。
// 全大写define('PI', 3.1415926);const E = 2.71828;echo constant('E'); // 取常量值defined('PI'); // 判断常量是否存在/** 预定义常量* PHP_VERSION:php版本信息* PHP_OS:php运行所在系统信息* PHP_INT_MAX:php版本中最大整数值* M_PI:圆周率*/echo M_PI;/** 魔术常量* __DIR__:文件所在目录* __FILE__:文件所在路径* __LINE__:常量所在行号*/echo __DIR__;
数据类型
/** 标量类型,基本类型,简单类型* 字符串string。双引号中的$会被识别为变量,要注意使用转义字符\* 整数integer,int* 浮点数double、float* 布尔boolean,bool。其中false、0、0.0、""、'0'、空数组都会被当作false*/$dec = 123;$bin = 0b01;$oct = 0123;$hex = 0xDDEEFF;decbin($dec); // 十进制转二进制decoct($dec); // 十进制转八进制dechex($dec); // 十进制转十六进制bindec($bin);octdec($oct);hexdec($hex);$f = 123e2; // 123*10^2$v1 = 0.1;$v2 = 0.2;$v3 = 0.3;round($v3 * 10000)==round(($v1 + $v2)*10000); // 浮点数存在精度问题,相等比较不可靠/** 复合类型* 数组array* 对象object*/$arr = array('name'=>'姓名', 'age'=>18);$arrNew = ['姓名', 18];$arrNew[1] = 20; // 数组赋值print_r($arrNew); // 输出变量的详细信息echo gettype($arr[0]); // 判断数据类型settype($arr[1], 'string'); // 设置数据类型is_int($arr[0]);is_bool($arr[0]);is_string($arr[0]);is_float($arr[0]);is_array($arr[0]);is_null($arr[0]);is_numeric($arr[0]); // 判断是否为数值类型,包含整数、小数、纯数字字符串is_object($arr[0]);empty($arr[0]); // 判数据为空,如0、0.0、""、"0"、false、array()/** 特殊类型* null:真空* 资源resource*/
数值计算
运算符
/** 取余,如非整数,会先自动转换为整数(直接忽略小数部分)再取余* 相等==可能会发生自动转换,全等===更严格*/10.2 % 3.6 === 1;$var = "1".true; // 连接运算符++$var; // 自增减运算符有分前后/** 逻辑运算符* 与&&、或||、非!* 存在短路规则,如果左侧满足,则不判断右侧*//** 位运算符* 按位与&:全1为1* 按位或|:全0为0* 按位非~:取反* 异或^:相同为0,不同为1* 左移<<、右移>>:左移即该数n位乘以2的n次方,右移同理*/if(@mysqli_connect('localhost', 'root', 'passwd')){// 错误抑制符@}
流程控制
分支
$var = 50;if ($var < 0) {echo "$var < 0";} elseif ($var > 0) {echo "$var > 0";} else {echo "$var =0";}switch($var % 2 === 0) {case true:echo "{$var}是偶数";break 1; // 中断第一层循环default:echo "{$var}是奇数";}
循环
$var = 50;while($var<=0){$var--;}do{$var--;}while($var<=0);for($i=0;$i++;$i<10){}
代码复用
函数
/** 1. 函数定义、调用与返回值* 2. 形参与实参* 3. 值传递与引用传递* 4. 参数默认值*/$var = 1;function func(&$a, $n = 5){// 与全局变量属于引用关系,指向同一份数据global $var;$var++;// 静态变量不会在函数结束时被销毁static $s = 1;$n += $s;return $a += $n;}$f = "func";echo $f($var, $var); // 可变函数$file = $_GET['fileName'];echo strstr($file, '.'); // 从指定字符第一次出现开始截取到尾echo strrchr($file, '.'); // 从指定字符最后一次出现开始截取到尾echo substr($file, 1, 4); // 从指定位置开始截取$anonymous = function() {}; // 匿名函数// 系统函数function_exists("func"); // 判断函数存在func_get_arg(2); // 获取第2个实参func_num_args(); // 获取实参个数$arr = func_get_args(); // 获取所有实参count($arr); // 求数组长度max($arr); // 最大值min($arr); // 最小值ceil(4.9); // 向上取整floor(-4.1); // 向下取整abs(-2); // 绝对值sqrt(2); // 开方pow(3, 2); // 幂运算rand(2, 3); // 闭区间随机整数mt_rand(0, 1); // 闭区间随机整数,更快time(); // 获取当前时间,精确到秒// 获取当前时间,精确到微秒microtime(true); // 返回浮点数microtime(false); // 返回字符串mktime(12, 30, 59, 12, 31, 2020); // 时、分、秒、月、日、年idate('Y'); // 得到时间特定值strtotime('2001-10-31'); // 字符串转时间戳date_default_timezone_set('PRC'); // 设置时区
文件
include "index.html"; // 加载文件,载入出错,后续继续执行include_once "func.php"; // 不会重复载入require "func.php"; // 如果载入出错,则终止require_once "func.php";getcwd(); // 当前绝对路径
其他
异常处理
ini_set('display_errors', 1); // 设置错误显示ini_set('error_reporting', E_ERROR); // 设置报错级别ini_set('log_errors', 1); // 设置错误日志ini_set('error_log', 'err.log'); // 设置错误日志路径trigger_error("错误提示内容", E_USER_NOTICE);set_error_handler("handle_error"); // 设置错误处理器function handle_error($errCode, $errMsg, $errFile, $errLine){file_put_contents("error.txt", $errMsg);} // 自定义错误只能处理不是E_ERROR的错误
字符串
- 单引号字符串:只能使用\和’这俩转义字符
- 双引号字符串:可以使用更多的转义符,$会被识别为变量,变量建议使用大括号包裹 ```php // 结束行只允许出现标识符与分号 $hereDoc = <<<”HereDoc” heredoc与双引号字符串同 HereDoc;
$nowDoc = <<<’NowDoc’ nowdoc写啥就是啥,变量也不会被识别 NowDoc;
$string = “字 符 串 \n>”; strlen($string); // 字符串字节数,GBK汉字占2Bytes,UTF8汉字占3Bytes mb_strlen($string, “utf8”); // 字符串字符数,php.ini中需要打开mbstring.so strpos($string, “ “); // 首次出现的位置 strrpos($string, “ “); // 尾次出现的位置
trim($string); // 清除空白 ltrim($string); rtrim($string); str_pad($string, 16, “0”, STR_PAD_BOTH); // 填充到指定字节长度
$arr = [‘测’, ‘试’]; implode($arr); // 连接数组的值 join($arr); // 同implode print_r(explode(“ “, $string)); // 使用指定字符分割字符串 print_r(str_split($string, 4)); // 使用指定字节长度分割字符串
str_replace(“ “, “-“, $string); substr_replace($string, “-“, 4); // 替换字符串指定位置的字符
strtolower($string); strtoupper($string); lcfirst($string); // 首字符为小写 ucfirst($string); // 首字符为大写 ucwords($string); // 所有单词首字母大写
nl2br($string); // 换行符变
addslashes($string); // 转义
$str = htmlspecialchars($string); // 转义为html实体字符
htmlspecialchars_decode($str);
<a name="UwnYm"></a>### 数组```php$arr = array('测', '试');foreach($arr as $key=>$value){echo "{$key} => {$value}";}reset($arr); // 移到最前一位,并获取值$len = count($arr);for($i = 0; $i <= $len; $i++){$key = key($arr); // 当前指针的下标$value = current($arr); // 当前指针的值}end($arr); // 移到最后一位,并获取值prev($arr); // 往前移,并获取前一位的值next($arr); // 往后移,并获取下一位的值in_array("测", $arr);range(3, 9); // 生成闭区间整数数组array_keys($arr); // 数组键集合array_values($arr); // 数组值集合array_push($arr, 1); // 压入并返回键array_pop($arr); // 弹出并返回末位值array_reverse($arr); // 反转数组
