PHP 基础知识

Array 数组

PHP中的数组实际上是一个有序映射。映射是一种把values关联到keys的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。

可以用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。

key 可以是 integer 或者 string。value 可以是任意类型。

key的强制转换规则

包含有合法整型值的字符串会被转换为整型。例如键名 “8” 实际会被储存为 8。但是 “08” 则不会强制转换,因为其不是一个合法的十进制数值。

浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。

布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。

Null 会被转换为空字符串,即键名 null 实际会被储存为 “”。

数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。

转换为数组

对于任意 integer,float,string,boolean 和 resource 类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为 0,该元素即为此标量的值。换句话说,(array)$scalarValue 与 array($scalarValue) 完全一样。

如果一个object类型转换为array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 ‘*’ 做前缀。这些前缀的前后都各有一个 NULL 字符。这会导致一些不可预知的行为。

将 NULL 转换为 array 会得到一个空的数组。

比较

可以用 array_diff() 和数组运算符来比较数组。

数组的赋值

数组(Array) 的赋值总是会涉及到值的拷贝。

使用引用运算符通过引用来拷贝数组。

实用函数

unset() 函数

unset()允许删除数组中的某个键。但要注意数组将不会重建索引。如果需要删除后重建索引,可以用 array_values() 函数。

foreach

foreach控制结构是专门用于数组的。它提供了一个简单的方法来遍历数组。

array_values 函数

array_values(array $input) 返回 input 数组中所有的值并给其建立数字索引。

list

list — 把数组中的值赋给一些变量

1
array list ( mixed $varname [, mixed $... ] )

像 array() 一样,这不是真正的函数,而是语言结构。list() 用一步操作给一组变量进行赋值。

魔术常量

__LINE__ 文件中的当前行号。

__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。

__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)

__FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

__CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。

__TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

__NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

判断 PHP 扩展是否加载

extension_loaded (PHP 4, PHP 5, PHP 7)

1
bool extension_loaded ( string $name )

举例:

检测 fileinfo 扩展是否加载:

1
2
3
if (!extension_loaded('fileinfo')) {
    throw new Exception('The fileinfo extension is not loaded.');
}

判断类的方法是否存在

method_exists — (PHP 4, PHP 5, PHP 7)

1
bool method_exists ( mixed $object , string $method_name )

判断函数是否存在

function_exists — 如果给定的函数已经被定义就返回 TRUE(PHP 4, PHP 5, PHP 7)

1
bool function_exists ( string $function_name )
Built with Hugo
主题 StackJimmy 设计