常量与数据类型考察点
字符串相关知识
PHP 中字符串
可以使用哪三种定义方式
以及各自的区别是什么?
定义方式:
- 单引号
- 双引号
- heredoc和newdoc
单引号区别:
-
单引号不能解析变量
-
单引号不能解析转义字符,只能解析单引号和反斜线本身
-
变量和变量、变量和字符串、字符串和字符串之间可以用
.
连接
双引号区别:
- 双引号可以解析变量,变量可以使用特殊字符和{}包含
- 双引号可以解析所有转义字符
- 也可以使用
.
操作符连接
单引号和双引号的区别:
- 单引号的效率更高
<?php
$a = 100;
$str = 'abcdef$ag';
echo $str . PHP_EOL; // 输出:abcdef$ag
$str = "abcdef'{$a}'gh";
echo $str . PHP_EOL; // 输出:abcdef100gh
$sql = "SELECT * FROM user WHERE name='$name'"; // 效率没有单引号高
$sql = 'SELECT * FROM user WHERE name=\''.$name.'\''; // 单引号中的单引号记得转义
Heredoc和Newdoc的区别:
- Heredoc类似于双引号
- Newdoc类似于单引号
- 这两者相对于单引号和双引号是用来处理大文本的
<?php
// Heredoc
$name = "SuperMan";
$str = <<<EOT
你好!我是{$name}。
EOT;
echo $str . PHP_EOL; // 输出:你好!我是SuperMan。
// Newdoc
$str = <<<'EoT'
你好!我是{$name}。
EoT;
echo $str . PHP_EOL; // 输出:你好!我是{$name}。
数据类型知识相关
八大数据类型回顾:
- 标量
- 整形 integer
- 字符串 string
- 浮点型 float
- 布尔类型 boolean
- 符合
- 数组 array
- 对象 object
- 特殊
- 资源类型 resource
- 空类型 null
浮点类型注意事项:
- 浮点类型不能运用到比较运算中
<?php
$a = 0.1;
$b = 0.7;
// 计算中浮点会被转换成为二进制,精度会有损耗,所以结果不一定准确
if($a + $b == 0.8) {
echo "相对?"; // 这句话不会被输出
}
布尔类型的其中情况:
类型 | 值 |
---|---|
整数型 | 0 |
浮点型 | 0.0 |
空字符串 | ' ' |
0字符 | '0' |
布尔型 | false |
空数组 | array()或者[] |
空类型 | null |
数组类型:
超全局数组
- $GLOBALS
- $_GET
- $_POST
- $_REQUEST (不建议使用,因为GET\POST\COOKIE他都接收,不安全)
- $_SESSION
- $_COOKIE
- $_SERVER
- $_SERVER['SERVER_ADDR'] 当前运行脚本所在的服务器的 IP 地址
- $_SERVER['SERVER_NAME'] 服务器名称
- $_SERVER['REQUEST_TIME'] 请求时间
- $_SERVER['QUERY_STRING'] URL中的QUERY字符串
- $_SERVER['HTTP_REFERER'] 上一个请求的页面
- $_SERVER['HTTP_USER_AGENT'] 请求的头里面的浏览器信息
- $_SERVER['REMOTE_ADDR'] 客户端ip地址
- $_SERVER['REQUEST_URI'] 请求地址
- $_SERVER['PATH_INFO'] URL中的路径,通用用于框架的路由处理
- $_FILES
- $_ENV
// 假设url => "http://www.superman.com/index.php/user/reg?status=dead";
echo $_SERVER['SERVER_ADDR'] . "<br>"; // 127.0.0.1
echo $_SERVER['SERVER_NAME'] . "<br>"; // 127.0.0.1
echo $_SERVER['REQUEST_TIME'] . "<br>"; // 1565683185
echo $_SERVER['QUERY_STRING'] . "<br>"; // status=dead
echo $_SERVER['HTTP_REFERER'] . "<br>"; // 有可能为空,因为直接访问url,不会存在
echo $_SERVER['HTTP_USER_AGENT'] . "<br>"; // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36
echo $_SERVER['REMOTE_ADDR'] . "<br>"; // 127.0.0.1
echo $_SERVER['REQUEST_URI'] . "<br>"; // /demo02.php/user/reg?status=dead
echo $_SERVER['PATH_INFO'] . "<br>"; // /user/reg
// 用PHP写出显示客户端IP的服务器IP的代码
echo $_SERVER['REMOTE_ADDR'] . "<br>"; // 客户端:127.0.0.1
echo $_SERVER['SERVER_NAME'] . "<br>"; // 服务器:127.0.0.1
NULL:
三种情况:
- 直接赋值为NULL
- 未定义的变量
- unset销毁的变量
常量:
一经定义,不能被修改,不能被删除。
定义方式:
- const 更快,因为是语言结构,可以定义类的常量
- define 慢,因为是函数,不能定义类的常量
预定义常量:
- __FILE__ 文件的路径名以及名称
- __LINE__ 所在行号
- __DIR__ 所在目录
- __FUNCTION__ 所在函数体的函数名称
- __CLASS__ 所在类的类名称
- __TRAIT__ 5.4+特性,所在trait的名称
- __METHOD__ 所在方法名称
- __NAMESPACE__ 5.4+特性,所在命名空间名称