php开发工程师面试题知识点总结(二)--基础篇
false的七种情况
整型0
浮点0.0
布尔false
空字符串'',""
字符串'0'
空数组[]
NULL
超全局数组
$GLOBALS,包含下面8个超全局数组的值
$_GET
$_POST
$_REQUERT,包含$_GET,$_POST,$_COOKIE
$_SEESION
$_COOKIE
$_SERVER
$_SERVER['SERVER_ADDR'] //服务器地址
$_SERVER['SERVER_NAME'] //服务名称
$_SERVER['REQUEST_TIME'] //请求时间
$_SERVER['QUERY_STRING'] //请求地址中问号后的内容
$_SERVER['HTTP_REFERER'] //上次请求地址
$_SERVER['HTTP_USER_AGENT'] //浏览器信息
$_SERVER['REMOTE_ARRR'] //客户端请求ip
$_SERVER['REQUEST_URI'] // 请求中脚本名称
$_SERVER['PATH_INFO'] // 请求中路径
$_FIELS
$_ENV
null的三种情况
直接赋值NULL
未定义变量
unset销毁后的变量
常量
一定定义,不可删除和修改
const 更快,是语言结构,可定义类常量
define 是函数
预定义常量
FILE 文件所在路径+文件名
LINE 所在代码行
DIR 所在文件夹路径
FUNCTION 方法名
CLASS 类名
TRAIT TRAIT的名称
METHOD 类名+方法名
NAMESPACE 命名空间名
引用变量
用不同名字访问同一个变量内容,用『&』符号表示
抽象类和接口
抽象类:
定义为抽象的类不能被实例化.
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。
例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。
这也适用于 PHP 5.4 起的构造函数。在 PHP 5.4 之前的构造函数声明可以不一样的.
接口:
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是公有,这是接口的特性。
要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
实现多个接口时,接口中的方法不能有重名。
接口也可以继承,通过使用extends操作符.
类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误.
区别:
对接口的继承使用implements,抽象类使用extends.
接口中不可以声明变量,但可以声明类常量.抽象类中可以声明各种变量
接口没有构造函数,抽象类可以有
接口中的方法默认为public,抽象类中的方法可以用public,protected,private修饰
一个类可以继承多个接口,但只能继承一个抽象类
运算符优先级
优先级由高到低排序
==递增/递减==
非(!)
==算术运算符==
==大小比较==
(不)相等比较
引用
位运算符(^)
位运算符(|)
==逻辑与==
==逻辑或==
==三目==
==赋值==
and
oxr
or
浮点数值得精度丢失问题
原因:因为计算机存储是二进制,准换进制时会有精度丢失
解决方案:先将浮点字符串化,再进行整数获取,输出可通过print
$f = 0.57;
$f = $f * 100;
// 输入可通过print
print('%d', $f);
// 用于存储或二次计算,先将浮点字符串化,再进行整数获取
$f = strval($f);
var_dump($f);
echo floor($f);
echo intval($f);
echo (int)($f);
switch 只能判断整型、浮点、字符
变量类型
普通变量
全局变量,通过
global
定义,可以在局部域调用全局变量,可通过$_GLOBAL['XXX']
读取变量的值静态变量,通过
static
定义,仅在局部域中存在,执行函数离开作用域,其值也不会消失
ip处理函数
ip2long()
long2ip()
时间日期处理函数
date()
strtotime()
mktime()
time()
microtime()
date_default_timezone_set()
打印处理
print() 仅输出单个变量
printf() 按格式输出
print_r() 格式化输出
echo 输出多个变量
sprintf() 按格式返回
var_dump() 格式化输出,并输出变量类型
var_export() 将格式化输出,加true可返回,返回内容可直接做变量使用
序列化
serialize()
unserialize()
字符串处理
implode(),join()
explode()
strrev() 反转字符
trim(),ltrim(),rtrim()
strstr() 获取第一次出现指定字符串的字符串
number_format() 数字格式化为金钱格式
数组处理
array_keys()
array_values()
array_diff()
array_megre()
array_shift()
array_unshift()
array_pop()
array_push()
sort(), rsort() 对数组升降序排序
asort(),arsort() 对数组键值升降序排序
ksort(),krsort() 对数组键名升降序排序
文件操作
fopen() 打开文件并指定模式
r/r+ 只读打开/读写打开,指针在文件开头
w/w+ 只写打开/读写打开,文件存在会清空,不存在会创建
a/a+ 写入追加写入/读写的追加写入,指针在文件末尾
x/x+ 写入/读写打开,指针开头,文件存在返回false,不存在就直接创建
b 二进制打开
写入
fwrite()
fputs()
读取
fread() 获取指定长度字符
fgets() 获取一行字符
fgetc() 获取一个字符
关闭 fopen()
文件大小 filesize()
文件复制 copy()
文件删除 unlink()
文件类型 filetype()
重命名或移动 rename()
文件属性
file_exist()
is_readable()
is_writable()
is_executable()
filectime() 创建时间
fileatime() 访问时间
filemtime() 更新时间
其他不需要fopen()打开的函数
file_get_contents()
file_put_contents()
其他
file()整个文件内容按行读取到一个数组里
readfile()整个文件读取出来,并输出
远程访问
php.ini
中打开 allow_url_fopen
配置,http协议只能使用只读,ftp协议,只能只读或只写
目录操作
名称相关
basename() 文件基础名称
dirname() 文件夹名称
pathinfo() 文件信息数组
目录读取
opendir()
readdir()
closedir()
rewinddir() 重置句柄
disk_free_space()
disk_total_space()
目录删除 rmdir()
目录必须为空
目录创建 mkdir()
重命名或移动 rename()
设计模式
工厂模式
单例模式
适配器模式
观察者模式
策略模式
注册树模式
魔术方法
__construct()
__destruct()
__call()
__callStatic()
__get()
__set()
__isset()
__unset()
__sleep()
__wakeup()
__toString()
__close()
网络协议
http状态码
200 请求成功
204 not content
206 reset content
301 永久重定向
302 临时重定向
307 临时重定向
400 错误请求
401 缺少认证信息
403 拒绝
404 不存在
500 服务器异常
502 Bad Gateway
503 服务器超负载或停机维护
OSI七层协议
物理层 建立、维护、断开物理连接
数据链路层 建立逻辑连接,进行硬件地址寻址,差错校验等功能
网络层 进行逻辑地址寻址,师兄不同网络之间的路径选择
传输层 定义传输数据的协议端口号,一级流控和差错校验。协议有TCP/UDP,数据包一旦离开网卡即进入网络传输层
会话层 建立、管理、终止会话
表示层 数据的表示、安全、压缩
应用层 网络服务与最终用户的一个借口,协议有:http(80),ftp(21),tftp,smtp(25),snmp,dns(53),telnet(23),https(443),pop3(110),dhcp
HTTP协议的工作特点和工作原理
工作特点:
基于B/S模式
通信开销小,简单快速,传输成本低
使用灵活,可使用超文本传输协议
节省传输时间
无状态
工作原理:
客户端发送请求给服务器,建立一个TCP连接,指定端口号,默认80,连接到服务器,服务器监听到浏览器的请求,一旦监听到客户端的请求,分析请求类型后,服务器会向客户端发送状态信息和数据内容
HTTP协议常见请求头/响应头
Content-Type 指定数据内容类型
Accept 指定客户端能接受数据内容类型
Origin 最初请求来源(POST)
Cookie
Cache-Control 指定请求的缓存机制
User-Agent 用户浏览器信息
Referrer 上级请求路径
X-Forwarded-For 请求端真实ip
Access-Control-Allow-Origin 允许其他请求域名,用于跨域
Last-Modified 最后响应时间
HTTPS的工作原理
HTTPS是一种基于SSL/TLS的HTTP协议,所有的HTTP数据都是SSL/TLS协议封装之上传输的
HTTPS是在HTTP协议的基础上,添加了SSL/TLS握手一级数据加密传输,也属于应用层协议