一、字符串的三种定义方式:
1、单引号:变量、转义字符都不会被解析,效率更高
2、双引号:可以解析变量和转义字符,效率没有单引号高
//双引号使用 $name = 'zhangsan'; $sql = "select * from user where name = '$name'"; 建议用单引号,并用点连接,效率更高 $sal = 'select * from user where name = \''. $name. '\'';
3、heredoc 和 nowdoc
heredoc 类似于双引号,nowdoc 类似于单引号。方便处理大文本
//heredoc 写法 $a = 'xiaofan'; $str = <<< EOT My name is $a, This is my blog. EOT; //注意这里的EOT可以任意指定,同时最后的EOT要在最前面,也就是前面不能有空格 //nowdoc 写法 就是在第一个标识符上加个单引号 $str1 = <<< 'JS' alert('test'); JS;
二、数据类型
数据类型分为三类:标量、复合、特殊
1、浮点数不能用于精确计算
$a = 0.1; $b = 0.7; if ($a + $b == 0.8){ //这里不会相等,因为浮点型得到的值是 0.7999999无限 echo 'eq'; }
2、布尔型 FALSE 的七种情况
整型 0 浮点型 0.0 空字符串 '' 字符串零 '0' 布尔值 false 空数组 array() NULL
3、超全局数组
$_GLOBALS $_GET $_POST $_REQUEST $_SESSION $_COOKIE $_SERVER $_FILES $_ENV
其中,$_GLOBALS 是包含后面的所有超全局数组。
重点要了解 $_SERVER 的常用常量:
$_SERVER['SERVER_ADDR'] 服务器IP地址
$_SERVER['SERVER_NAME'] 服务器名称
$_SERVER['REQUEST_TIME'] 请求开始的时间戳
$_SERVER['QUERY_STRING'] 查询字符串,也就是网址中?后面的参数部分,可能为空
$_SERVER['HTTP_REFERER'] 用户访问的上一个页面地址,可能为空
$_SERVER['HTTP_USER_AGENT'] 当前请求中的头信息
$_SERVER['REMOTE_ADDR'] 用户的客户端IP,也就是访问IP
$_SERVER['REQUEST_URI'] 用户的访问的页面,脚本后面的所有内容,比如 /admin/index.php?id=3
$_SERVER['PATH_INFO'] 跟在脚本后面和查询语句之前的部分,比如 http://xiaofan.hoopan.net/index.php/user/log?username=xiaofan 这里的path_info就是/user/log
3、NULL的三种情况
直接赋值为NULL、未定义的变量、unset销毁的变量
4、常量
常量使用 const define 定义,其中 const 是语言结构,效率更高(在php5.3.0以后,可以使用const关键字在类的外部定义常量,先前版本const关键字只能在类(class)中使用),define 是函数。
const 可以定义类的常量,define 不能定义类的常量。
常量一经定义,不能修改,不能删除。
const NAME = 'xiaofan'; const NAME = "xf"; var_dump(NAME); //输出结果 xiaofan define("AGE", 12); var_dump(AGE); class person { const SEX = 'man'; //define("ADDR", "nanjing"); //不能定义 } echo person::SEX;
5、预定义常量,也叫魔术常量
__FILE__ 当前脚本路径, 如 /home/wwwroot/a.php
__LINE__ 当前行号
__DIR__ 当前文件目录,如 /home/wwwroot
__FUNCTION__ 当前函数名称
__CLASS__ 当前类名
__TRAIT__
__METHOD__ 当前方法名
__NAMESPACE__ 当前命名空间