PHP 基础知识汇总
2021-05-06 本文已影响0人
phpworkerman
有道是温故而知新,良好的基础才是前行的保障。
1、PHP 支持10种数据类型。
- 标量类型:string(字符串)、int(整型)、float(浮点型)、bool(布尔型)
- 符合类型:array(数组)、object(对象)、callable(可调用)、iterable(可迭代)
- 特殊类型:resource(资源)、NULL(无类型)
2、变量作用域
- 变量范围可跨越 include 和 require 引入的文件
- 用于函数内部的变量,范围被局限于函数内
- 使用 global 关键字可以在函数内部使用全局变量
- 静态变量仅在局部函数域中存在,当程序离开域时,变量值不丢失。
3、运算符
- 前递增 ++a++ 得到递增前的值,null 值递增时加1,null 值递减还是 null
- instanceof 类型运算符用来确定一个变量是否是属于一个类的实例、是否继承某一父类的子类的实例、是否实现了某一个接口
4、流程控制
- for 循环中,for (expr1, expr2, expr3),expr2 通常用来指定循环次数,避免用 count() 函数来每次计算目标总数
- foreach 循环中,如果需要给多维数组解包,可以用 list()
- switch 循环中,当 case 匹配到 switch 中的表达式时才执行,并且直到碰到 break 才停止
- require 和 include 也属于流程控制,区别是 require 在加载失败时会产生 E_COMPILE_ERROR 错误,并终止脚本,include 只产生警告,脚本正常执行
5、函数
- 可变数量的参数列表通过 ... 语法将参数列表变为一个数组
- 如果在类中,使用可变函数优先级高于静态变量
- 匿名函数使用 use 语法从父作用域中继承变量
- 箭头函数是更简洁的匿名函数,它可以自动捕获父作用域的变量
6、类和对象
- 如果类中属性值为匿名函数,将无法直接调用函数,因为属性优先级更高,需要在属性外加(),($this->attr)()
- PHP 不支持多重继承,一个类只能继承一个基类
- ::class 语法用于类名的解析,包含类名的命名空间,解析类名的操作在底层编译时进行,即使要调用的类不存在,类名也会被展示,不会报错。
- 抽象类不能实例化,子类必须实现抽象类中的所有抽象方法,访问控制范围不能小于抽象类,参数类型也必须完全符合
- 一个类可以实现多个接口
- trait 是解决单继承语言复用问题,方法优先级 自身 > trait > 基类
- 如果多个 trait 引入出现方法重名冲突,有两种解决方法,一种是用 instanceof 指定方法属于哪个 trait,另外一种是用 as 给方法指定别名,as 语法还可以修改方法的访问控制
- trait 可使用抽象方法,强制类的使用
- 对象比较 == 代表两个对象是同一个类型的实例, === 代表两个对象变量是同一个对象
- 后期静态绑定 ::static 不再被解析为定义当前方法所在的类,而是在实际运行时计算的
- 后期静态绑定的解析会一直到取得一个完全解析了的静态调用为止
7、命名空间
- 名称解析分为非限定名称(func)、限定名称(A\func)、完全限定名称(\A\func)
8、异常
- try/catch/finally,finally 块里的 return 会和前两个块中的 return 相互影响,优先执行 finally 块