了解大部分数组处理函数
array()创建数组
array_change_key_case() 把数组中所有键更改为小写或大写
array_chunk() 把一个数组分割为新的数组块
array_column() 返回输入数组中某个单一列的值
array_combine() 通过合并两个数组来创建一个新数组
array_count_values() 用于统计数组中所有值出现的次数
array_diff() 比较数组,返回差集(只比较键值)
array_diff_assoc() 比较数组,返回差值(比较键名和键值)
array_difff_key() 比较数组,返回差值(只比较键名)
array_diff_uassoc()比较数组,返回差值(比较键名和键值),使用用户自定义的键名比较函数
array_difff_ukey() 比较数组,返回差值(只比较键名),使用用户自定义的键名比较函数
array_fill() 用给定的键值填充数组
array_fill_keys() 用指定键名的给定键值填充数组
array_filter() 用回调函数过滤数组中的元素
array_flip() 交换数组中的键和值
array_intersect() 比较数组,返回交集(只比较键值)
array_intersect_key() 比较数组,返回交集(只比较键名)
array_intersect_assoc() 比较数组,返回交集(比较键名和键值)
array_intersect_uassoc() 比较数组,返回交集(比较键名和键值)使用用户自定义的键名比较函数
array_intersect_ukey() 比较数组,返回交集(比较键名和键值)使用用户自定义的键名比较函数
array_key_exists() 检查指定的键名是否存在于数组中
array_keys() 返回数组中所有的键名
array_map() 把数组中的每个值发送到用户自定义的函数,返回新的值
array_merge() 把一个或多个数组合并为一个数组
array_merge_recursive() 递归地合并一个或多个数组
array_pad() 用值将数组填补到指定长度
array_pop() 删除数组的最后一个元素(出栈)
array_product() 计算数组所有值的乘积
array_push() 将一个或多个元素插入数组的末尾
array_rand() 返回数组中一个或多个随机的键
array_reduce() 通过使用用户自定义函数,以字符串返回数组
array_replace() 使用后面数组的值替换第一个数组的值
array_replace_recursive() 递归地使用后面数组的值替换第一个数组的值
array_reverse() 以相反的顺序返回数组
array_search() 搜索数组中给定的值并返回键名
array_shift() 删除数组中首个元素,并返回被删除元素的值
array_slice() 返回数组中被选中的部分
array_splice() 删除并替换数组中指定的元素
array_sum() 返回数组中值的和
array_udiff() 比较数组,返回差集(只比较值)使用用户自定义的键名函数
array_udiff_assoc() 比较数组,返回差集,比较键和值,使用内建函数比较键名,使用用户自定义函数比较键值
array_udiff_uassoc()比较数组,返回差集(比较键和值,使用两个用户自定义的键名比较函数)
arary_uintersect_assoc()比较数组,返回交集(只比较值,使用一个用户自定义的键名比较函数)
array_uintersect_assoc() 比较数组,返回交集(比较键和值,使用内建函数比较键名,使用用户自定义函数比较键值)
array_uintersect_uassoc()比较数组,返回交集(比较键和值,使用两个用户自定义的键名比较函数
array_unique()删除数组中重复的元素
array_unshift() 在数组开题插入一个或多个元素
array_values() 返回数组中所有的值
array_walk() 对数组中的每个成员应用用户函数
array_walk_recursive() 对数组中的每个成员递归地应用用户函数
arsort() 对关联数组按照键值进行降序排序
asort() 对关联数组按照键值进行升序排序
compact() 创建包含变量名和他们的值的数组
count() 返回数组中元素的数目
current() 返回数组中当前元素
each() 返回数组中单曲的键/值对。
end() 将数组的内部指针指向最后一个元素
extract() 从数组中将变量导入到当前的符号表
in_array() 检查数组中是否存在指定的值
key() 从关联数组中取得键名
krsort() 对数组按照关键名逆向排序
ksort() 对数组按照关键名排序
list() 把数组中的值赋给一些变量
natcassesort() 用“自然排序”算法对数组进行不区分大小写字母的排序
natsort() 用”自然排序“算法对数组排序
next() 将数组中的内部指针向前移动一位
pos() current()的别名
prev() 将数组的内部指针倒回一位
range() 创建包含指定范围单元的数组
reset() 将数组的内部指针指向第一个元素
rsort() 对数组逆向排序
shuffle() 将数组打乱
sizeof() count()的别名
sort() 对数组排序
uasort() 使用用户自定义的比较函数对数组宏的键值进行排序
uksort() 使用用户自定义的比较函数对数组宏的键名进行排序
usort() 使用用户自定义的比较函数对数组进行排序
字符串处理函数(区别 mb_ 系列函数)
strchr() 查找字符串在另一个字符串中的第一次出现(strstr()的别名)
strcmp() 比较两个字符串(对大小写敏感)
strcoll() 比较两个字符串(根据本地设置)
strcspn() 返回在找到某些指定字符的任何部分之前,字符串中查找的字符数
strip_tags() 剥去字符串中的HTML和PHP标签
stripos() 返回字符串在另一个字符串中第一次出现的位置(对大小写不敏感)
stristr() 查找字符串在另一个字符串中第一次出现的位置
& 引用,结合案例分析
== 与 === 区别
isset 与 empty 区别
isset 变量被设置且非空
empty
全部魔术函数理解
__construct(),__destruct(), __call(), __callStatic,__get(), __set(), __isset(), __unset(),__sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone()和__debugInfo()被称为魔法方法。
PHP将所有以__(两个下划线)开头的类方法保留为魔术方法。
__sleep()和 __wakeup()
serialize()函数会检查类中是否存在一个魔术方法__sleep()。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则NULL被序列化,并产生一个E_NOTICE级别的错误。
__sleep()不能返回父类的私有成员的名字。这样做会产生一个E_NOTICE级别的错误。可以用Serializable接口来替代。
__sleep()方法常用于提交未提交的数据,或类似的清理工作。
__wakeup()经常用作饭序列化操作中,例如重新建立数据库连接,或执行其他初始化操作。
<?php
class Connection{
protected $link;
private $server, $username, $password, $db;
public function __construct($server, $username, $password, $db){
$this->server = $server;
$this->username = $username;
$this->password = $password;
$this->db = $db;
$this->connect();
}
private function connect(){
$this->link = mysql_connect($this->server, $this->username, $this->password);
mysql_select_db($this->db, $this->link);
}
public function __sleep(){
return array('server', 'username','password', 'db');
}
public function __wakeup(){
$this->connect();
}
}
__toString()
__toString()方法用于一个类被当成字符串时应怎样回应。此方法必须是字符串,否则将发出一条E_RECOVERABLE_ERROR级别的致命错误。
不能在__toString()方法中抛出异常,这么做会导致致命错误。自PHP5.2.0起,如果将一个未定义__toString()方法的对象转换为字符串,会产生E_RECOVERABLE_ERROR级别的错误。
__invoke()
当尝试以调用函数的方式调用一个对象时,__invoke()方法会被自动调用。
本特性在PHP5.3.0以及以上版本有效。
__set_state()
自php5.1.0起当调用var_export()导出类时,此静态方法会被调用。
$this、self 区别
self和parent
在子类中常用到这两个对象,self可以调用父类属性中的公有或受保护的属性,但parent不可以调用
self::表示当前类的静态成员(方法和属性)与this不同,∗∗this不同,**this不同,∗∗this指当前对象**
private、protected、public、final 区别
public:公有类型,子类可以通过self::var调用public方法或属性,parent::method调用父类方法
protected:受保护类型,在子类中可以通过self::var调用protected方法或属性,parent::method调用父类方法,在实例中不能通过$obj->var来调用protected类型的方法或属性
private:私有类型,该类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例都不能调用私有类型的属性方法。
Trait 是什么东西
从php5.4以来,php实现了一种代码复用的方法,叫做trait
示例:
<?php
trait ezcReflectionReturnInfo{
function getReturnType(){}
function getReturnDescription() {}
}
class ezcReflectionMethod extends ReflectionMethod(){
use ezcReflectionReturnInfo;
}
class ezcReflectionFunction extends ReflectionFunction {
use ezcReflectionReturnInfo;
}
echo、print、print_r 区别
echo()函数:输出一个或多个字符串,它并不是一个函数,所以不必使用括号
print()函数:print有返回值,echo没有,当其执行失败时返回false,成功则返回true,速度比echo稍慢。
print_r能打印出复杂类型的值。
var_dump()函数:此函数显示关于一个或多个表达式的结构信息,包括表达式的类型和值。
static 作用(区分类与函数内)
static关键字可用于定义静态方法和属性,也可用于定义静态变量以及后期静态绑定。
静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。因此,伪变量$this在静态方法中不可用。
静态方法中不可以由对象通过->操作符来访问。
静态属性只能被初始化为文字或常量,不能使用表达式。
单引号’ 与双引号 “ 区别
一般情况下,单引号和双引号是通用的。而单引号串中的内容总被认为是普通字符,因此单引号中的内容不会被转义效率更高。