【PHP常见面试题 PHP基础-常量及数据类型】PHP的字符串的定义方式及各自区别?

一. 常量及数据类型考察点

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.10.7 在进行计算的时候,是交给 CPU 进行计算的,CPU在计算的时候,只能将其转为二进制。在转换为二进制的时候,会有一定的损耗,会转为 010101...的格式。对于 0.10.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__ 表示什么意思?

返回所在文件的 文件路径 和 文件名

猜你喜欢

转载自blog.csdn.net/studyphp123/article/details/83450739