文章目录
一. 常量及数据类型考察点
1. PHP的 字符串
的 定义方式
及 各自区别
;
1)定义方式:单引号/ 双引号 / heredoc 和 newdoc;(三种)
① 单引号:
// 单引号定义变量
$str = 'a b c d e f $a g'; // 此时$a会被原样输出
② 双引号:
// 此处可以把 '{$a}' 换成特殊字符,如 & $a &
// 原因:单引号的执行效率更高,且将name放到外面可读性更强。
$str = "a b c d e f '{$a}' g h"; // a b c d e f $a的值 g h
注:双引号中包含单引号,单引号中包含变量,该变量是会被解析的,因为最外层是双引号,且里面的单引号会被原样输出.
使用场景:一般会用于sql语句
不推荐写法:$sql = "SELECT * FROM user WHERE name = '$name'"
;
推荐写法: $sql = 'SELECT * FROM user WHERE name = \''.$name.'\''
;
③ heredoc:
- 开头和结尾的名字保持一致;
- 结尾要放到一行的开头(前面不可以有任何字符,包括空格)【适用于超长的内容】;
- 功能与双引号一致;
$str = <<<EoT
.
. // 内容可以为字符串,可以写变量、转义字符等,都可以被解析(功能与双引号一致)
.
.
EoT;
④ newdoc :
- 开头和结尾名字要保持一致,且定界符处用单引号括起来;
- 结尾要放到一行的开头(前面不可以有任何字符,包括空格)【适用于超长的内容】;
- 功能与单引号一致
// newdoc
$str = <<<'EoT'
.
.
.
.
EoT;
2)区别:
单引号:
(1) 单引号不能解析变量;
(2) 单引号不能解析转义字符,只能解析单引号和反斜杠本身;
(3) 变量和变量、变量和字符串、字符串和字符串之间可以用.连接;
(4) 单引号的效率更高;
双引号:
(1) 双引号可以解析变量,变量可以使用特殊字符和{}包含;
(2) 双引号可以解析所有转义字符;
(3) 也可以使用.来连接;
heredoc 和 newdoc:
(1) heredoc 功能类似于 双引号;
(2) newdow 功能类似于 单引号;
(3) 两者都是用来处理大文本。
2. 延伸:数据类型及常量
1) 数据类型
三个数据类型(标量、复合、特殊)
标量类型:
整型(int)
浮点型(float)
字符串(string)
布尔型(boolean)
复合类型:
对象(object)
数组(array)
特殊类型:
资源(resource)
NULL
数据类型中的注意事项:
- 浮点型:浮点类型不能运用于比较运算中,精确的来说,不能用于相等的判断中。
$a = 0.1;
$b = 0.7;
if ($a + $b == 0.8) { // false = 0.79999....
}
由于 0.1
和 0.7
在进行计算的时候,是交给 CPU 进行计算的,CPU在计算的时候,只能将其转为二进制。在转换为二进制的时候,会有一定的损耗,会转为 010101...
的格式。对于 0.1
和 0.7
来说,0.1
在转换的时候,会转换为 010101...
的格式,就会有损耗。有损耗的话, 我们 0.1 + 0.7 = 0.799999...
,最终是得不到 0.8
了, 损耗了 0.00000.....1
。因此,浮点类型不能用于精确的相等的判断。
① 布尔型:需掌握 FALSE的七种情况
1) 整型 0;
2) 浮点 0.0;
3) 空字符串 '';
4) 零字符串 '0';
5) 布尔型 false;
6) 空数组 array();
7) NULL;
② 数组类型:考察 超全局数组
$GLOBALS; // 包含了后面的所有内容
$_GET
$_POST
$_REQUEST; // 包含了 $_GET、$_POST、$_COOKIE,【$_REQUEST尽量少用,它相当于一个万能钥匙,既可以接收 get/post/cookie,它的安全性偏低】
$_SESSION;
$_COOKIE;
$_SERVER;
$_FILES;
$_ENV;
$_SERVER
重点记忆:
$_SERVER['SERVER_ADDR']; // 服务器端的IP地址【重点考察】
$_SERVER['SERVER_NAME']; // 服务器名称
$_SERVER['REQUEST_TIME']; // 启动时间
$_SERVER['QUERY_STRING']; // 问号后面的内容(有可能为空)
$_SERVER['HTTP_REFERER']; // 上级请求的页面(从哪过来的,也可能为空,从网址请求过来的时候,为空)
$_SERVER['HTTP_USER_AGENT']; // 返回头信息中user_agent的信息
$_SERVER['REMOTE_ADDR']; // 客户端的IP地址【重点考察】
$_SERGER['REQUEST_URI']; // 比如我们请求的是 index.php,此时 URI为 /index.php
$_SERVER['PATH_INFO']; // 用来处理路由或处理框架中路由的功能(抓取的是URL地址中的路径部分,既不是前面的脚本的名称,也不是后面的 $_SERVER['QUEST_STRING'])【如:访问 http://www.imooc.com/index.php/use/reg?status=ghost,则抓取的是 use/reg?status=ghost】
③ NULL:三种情况
1) 直接赋值为NULL;
2) 未定义的变量;
3) unset销毁的变量;
2) 常量
① 定义
1) const 更快,是语言结构;可以定义类常量;
2) define 是函数;不能定义类常量;
注:常量一经定义,不能被修改,不能被删除;
② 预定义常量
__FILE__; // 返回文件的路径名 和 文件的名称
__LINE__; // 所在行的行号
__DIR__; // 所在目录
__FUNCTION__; // 所在函数体中的函数名称
__CLASS__; // 类名
__TRAIT__; // trait的名称(PHP 5.4起的一个特性)
__METHOD__; // 类名 + 方法名
__NAMESPACE__; // namespace的名称
二. 真题
1. 用PHP写出显示客户端IP与服务器IP的代码。
// 客户端IP
$_SERVER['REMOTE_ADDR'];
// 服务器IP
$_SERVER['SERVER_ADDR'];
2. __FILE__
表示什么意思?
返回所在文件的 文件路径 和 文件名