前言
本系列文章主要是根据实战视频《360大牛:全面解读PHP面试》学习过程中记录的学习笔记,期间也会加入查找资料和平时学习中学习到的知识。
数据类型
PHP中数据类型主要分为三大数据类型(标量、复合、特殊):
标量:浮点、整型、字符串、布尔
复合:数组、对象
特殊:null、resource
浮点类型
浮点类型不能运用到比较运算中。
<?php
$a = 0.1;
$b = 0.7;
if($a +$b == 0.8) {
echo "true";
} else {
echo "false"; false $a + $b = 0.79999999
}
布尔类型
FALSE的七种情况:
0, 0.0, '', '0', false, array() , NULL (整型0、浮点0.0、布尔false、空字符串、0字符串、空数组、NULL)
字符串
①定义方式:
单引号、双引号、heredoc和nowdoc
②区别
1)单引号不能解析变量;
单引号不能解析转义字符,只能解析单引号和反斜线本身;
变量和变量、变量和字符串、字符串和字符串之间可以用连接符 . 连接。
<?php
//单引号不能解析变量;双引号可以
$a = 'g';
$str = 'abcdef$ah'; //输出结果 abcdef$ah
$str = "abcdef'{$a}'h"; //输出结果 abcdef‘g’h
//单引号不能解析转义字符,只能解析单引号和反斜线本身
echo '\n'; // 输出 \n
echo '\\'; // 输出 \
echo '\''; // 输出 '
//连接符连接
$str = 'hello';
echo $str . ' world'; //输出 hello world
2)双引号可以解析变量,可以使用特殊字符和{}包含;双引号可以解析所有转义字符;可以使用.来连接。
3)单引号效率更高。
4)Herdoc类似于双引号;Nowdoc类似于单引号
<?php
$str = <<<EoT
.
. //heredoc 类似于双引号 可以解析变量和转义字符
.
EoT;
$str = <<<'EoT'
.
. //nowdoc类似于单引号 不可以解析变量和转义字符
.
EoT;
两者都用于处理大文本
在使用 heredoc 和 nowdoc 时,经常会遇到如下报错:
Parse error: syntax error, unexpected T_SL in php
一般遇到该问题的原因是定界符之后空格的问题引起的。如上例中的EOT后面有空格就会报这个错。处理是否有空格还有一个小技巧。以vim为例,语法正确时,开始和结尾处的EOF会高亮显示。不高亮时,则证明语法有问题。(参考链接:https://blog.csdn.net/jinxingfeng_cn/article/details/51643619)
数组类型
超全局数组
$GLOBALS 引用全局作用域中可用的全部变量。$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(在函数或方法中均可)。PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。
$_GET 可用于收集提交 HTML 表单 (method="get") 之后的表单数据。也可以收集 URL 中的发送的数据。
$_POST 用于收集提交 method="post" 的 HTML 表单后的表单数据。$_POST 也常用于传递变量。
$_REQUEST 用于收集 HTML 表单提交的数据。尽量不使用它,因为不论是post还是get都可以访问。
$_SESSION 会话机制。取得当前用户访问的唯一标识,以数组形式体现,如sessionid以及自定义session数据。session 变量,当前脚本可用的 SESSION 变量的数组。
$_COOKIE 会话机制。获取和设置当前网站的Cookie标识。HTTP Cookies 变量,通过 HTTP Cookies 方式传递给当前脚本的变量的数组。
$_SERVER 保存关于报头、路径和脚本位置的信息。服务器信息变量,包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的数组。这个数组中的项目由 Web 服务器创建。
$_FILES 由HTTP POST 文件上传而提交至脚本。HTTP 文件上传变量,通过 HTTP POST 方式上传到当前脚本的项目的数组。
$_ENV 与当前脚本文件的执行环境相关的一些变量。环境变量,通过环境方式传递给当前脚本的变量的数组。
注意:
$GLOBALS 包含了后面的所有超全局数组
$_REQUEST 包含了 $_GET 、 $_POST 、 $_COOKIE 。$_REQUEST 尽量少用。
对于 $_SERVER 需要记住常用的属性:
$_SERVER['SERVER_ADDR] 服务器ip地址
$_SERVER['SERVER_NAME] 服务器名字
$_SERVER['SERVER_TIME] 请求时间
$_SERVER['QUERY_STRING] 查询字符串,可能为空
$_SERVER['HTTP_REFERER] 上一级请求的页面
$_SERVER['HTTP_USER_AGENT] http的header中user_agent的信息
$_SERVER['REMOTE_ADDR] 客户端ip地址
$_SERVER['REQUEST_URI] 如请求为 www.imooc.com/index.php 那么该值为 /index.php
$_SERVER['PATH_INFO] url中地址部分 www.imooc.com/index.php/user/reg?status=true 该值为 user/reg
NULL
变量为 NULL 的三种情况:
直接赋值为NULL、未定义的变量、unset()销毁的变量。
常量
①定义:
const define
②区别:
const是语言结构,效率更快, define是函数。
define不能用于类常量的定义,const则可以。
注意:常量一经定义,不能被修改,也不能被删除。
魔术常量
PHP中有八个魔术常量,它们的值会随着它们在代码中的位置的改变而改变。这些特殊的常量不区分大小写。
__FILE__ 当前PHP程序脚本的绝对路径及文件名称。返回当前文件的绝对路径(包含文件名)。
__LINE__ 存储该常量所在的行号。返回文件中的当前行号。也可写成__line__。
__DIR__ 返回当前文件的绝对路径(不包含文件名),等价于 dirname(__FILE__)。
__FUNCTION__ 存储该常量所在的函数名称。返回当前函数(或方法)的名称。
__CLASS__ 存储该常量所在的类的名称。返回当前的类名(包括该类的作用区域或命名空间)。
__TRAIT__ 返回当前的trait名称(包括该trait的作用区域或命名空间)。
__METHOD__ 存储该常量所在的类的方法的名称。返回当前的方法名(包括类名)。
__NAMESPACE__ 返回当前文件的命名空间的名称。
预定义常量
内核预定义常量:是在PHP的内核中就定义好了的常量。区分大小写。
PHP_VERSION 存储当前PHP的版本号,也可以通过PHPVERSION()函数获取。
PHP_OS 存储当前服务器的操作系统。
PHP_EOL 系统换行符,Windows是(\r\n),Linux是(\n),MAC是(\r)。
非全局预定义变量
$php_errormsg:前一个错误信息,$php_errormsg 变量包含由 PHP 生成的最新错误信息。这个变量只在错误发生的作用域内可用,并且要求 track_errors 配置项是开启的(默认是关闭的)。
$HTTP_RAW_POST_DATA:包含 POST 提交的原始数据。
$http_response_header:HTTP 响应头,$http_response_header 数组与 get_headers() 函数类似。当使用HTTP包装器时,$http_response_header 将会被 HTTP 响应头信息填充。
$argc:传递给脚本的参数数目,包含当运行于命令行下时传递给当前脚本的参数的数目。脚本的文件名总是作为参数传递给当前脚本,因此 $argc 的最小值为 1,这个变量仅在 register_argc_argv 打开时可用。
$argv:传递给脚本的参数数组,包含当运行于命令行下时传递给当前脚本的参数的数组。第一个参数总是当前脚本的文件名,因此 $argv[0] 就是脚本文件名,这个变量仅在 register_argc_argv 打开时可用。
常量与数据类型解题方法
把我们总结的点进行梳理和复习,牢记。
参考链接:
https://blog.csdn.net/jinxingfeng_cn/article/details/51643619
https://blog.csdn.net/lamp_yang_3533/article/details/50909260
http://www.w3school.com.cn/php/php_superglobals.asp
https://www.cnblogs.com/zdigd/p/7423488.html