本系列文章主要是根据实战视频《360大牛:全面解读PHP面试》学习过程中记录的学习笔记,期间也会加入查找资料和平时学习中学习到的知识。
变量的作用域也称变量的范围,变量的范围即它定义的上下文背景(也是它的生效范围)。大部分的PHP变量只有一个单独的范围。这个单独的范围跨度同样包含了include和require引入的文件。
在函数体内部引用外部变量,可以使用global关键字,$GLOBALS及其他超全局数组。
静态变量仅在局部函数域中存在,当程序执行离开此作用域时,其值并不会消失。
static关键字
1.仅初始化一次;
2.初始化时需要赋值;
3.每次执行函数该值会保留;
4.static修饰的变量是局部的,仅在函数内部有效;
5.可以记录函数的调用次数,从而可以在某些条件下终止递归。
默认情况下,函数参数通过值传递。
如果希望允许函数修改它的值,必须通过引用传递参数
值通过使用可选的返回语句(return)返回。
可以返回包括数组和对象的任意类型。
返回语句会中止函数执行,将控制权交回函数调用处。
省略return ,返回值为NULL,不可以有多个返回值。
从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符&。
include/require语句包含并运行指定文件。
如果给出路径名则按照路径来查找,否则从include_path中查找;如果include_path中没有找到,则从调用脚本文件所在的目录和当前工作目录下查找。
当一个文件被包含时,其中所包含的代码继承了include所在行的变量范围。
加载过程中未找到文件则include结构会发出一条警告;而require此时会发出一个致命错误。
require在出错时产生E_COMPILE_ERROR级别的错误。这将会导致脚本中止,而include只产生警告(E_WARNING),脚本会继续运行。
require(include)/require_once(include_once)唯一区别是PHP会检查该文件是否已经被包含过,如果被包含过则不会再次包含。
时间日期函数
date() 格式化一个本地时间/日期
string date ( string $format [, int $timestamp ] )
返回将整数 timestamp 按照给定的格式字串而产生的字符串。如果没有给出时间戳则使用本地当前时间。换句话说,timestamp 是可选的,默认值为 time()。
例子:
strtotime() 将任何字符串的日期时间描述解析为 Unix 时间戳
int strtotime ( string $time [, int $now = time() ] )
接受一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数),其值相对于 now 参数给出的时间,如果没有提供此参数则用系统当前时间。
例子:
mktime() 取得一个日期的 Unix 时间戳
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
根据给出的参数返回 Unix 时间戳。
例子:
time() 返回当前的 Unix 时间戳
int time ( void )
例子:
microtime() 返回当前 Unix 时间戳和微秒数
mixed microtime ([ bool $get_as_float ] )
例子:
date_default_timezone_set() 设定用于一个脚本中所有日期时间函数的默认时区
bool date_default_timezone_set ( string $timezone_identifier )
如果 timezone_identifier 参数无效则返回 FALSE,否则返回 TRUE。
例子:
IP处理函数
ip2long() 将 IPV4 的字符串互联网协议转换成长整型数字
int ip2long ( string $ip_address )
返回 IPV4 网络地址的长整型格式,从标准网络地址格式(点字符串)转化得到。返回IP地址转换后的数字 或 FALSE 如果 ip_address 是无效的。
例子:
long2ip() 将长整型转化为字符串形式带点的互联网标准格式地址(IPV4)
string long2ip ( int $proper_address )
通过长整型的表达形式转化生成带点格式的互联网地址(例如:aaa.bbb.ccc.ddd )。
例子:
打印处理
print() 输出字符串
int print ( string $arg )
输出 arg。print 实际上不是函数(而是语言结构),所以可以不用圆括号包围参数列表。和 echo 最主要的区别: print 仅支持一个参数,并总是返回 1。
printf() 输出格式化字符串
int printf ( string $format [, mixed $args [, mixed $... ]] )
依据 format 格式参数产生输出。
例子:
print_r() 以易于理解的格式打印变量。
mixed print_r ( mixed $expression [, bool $return = FALSE ] )
以人类易读的格式显示一个变量的信息。
print_r()、 var_dump()、 var_export() 都会显示对象 protected 和 private 的属性。 Class 的静态属性(static) 则不会显示。
例子:
'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));
print_r ($a); //Array ( [a] => apple [b] => banana [c] => Array ( [0] => x [1] => y [2] => z ) )
echo 输出一个或多个字符串
void echo ( string $arg1 [, string $... ] )
输出所有参数。不会换行。
echo 不是一个函数(它是一个语言结构), 因此你不一定要使用小括号来指明参数,单引号,双引号都可以。 echo (不像其他语言构造)不表现得像一个函数, 所以不能总是使用一个函数的上下文。 另外,如果你想给echo 传递多个参数, 那么就不能使用小括号。
sprintf() 跟printf()类似
string sprintf ( string $format [, mixed $... ] )
var_dump() 打印变量的相关信息
void var_dump ( mixed $expression [, mixed $... ] )
显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
例子:
var_export() 输出或返回一个变量的字符串表示
mixed var_export ( mixed $expression [, bool $return ] )
通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。
例子:
1, 1 => 2, 2 => array ( 0 => 'a', 1 => 'b', 2 => 'c', ), )
$b = 3.1;
$v = var_export($b, TRUE);
echo $v; //3.1
序列化及反序列化函数
serialize() 产生一个可存储的值的表示
string serialize ( mixed $value )
返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。
这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。
serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。
当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。
unserialize() 从已存储的表示中创建 PHP 的值
mixed unserialize ( string $str )
对单一的已序列化的变量进行操作,将其转换回 PHP 的值。若被解序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup() 成员函数(如果存在的话)。
字符串处理函数
implode() 将一个一维数组的值转化为字符串.
string implode ( string $glue , array $pieces )
string implode ( array $pieces )
用 glue 将一维数组的值连接为一个字符串。
$glue默认为空的字符串 $pieces 想要转换的数组.
例子:
explode() 使用一个字符串分割另一个字符串
array explode ( string $delimiter , string $string [, int $limit ] )
此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 delimiter 作为边界点分割出来。
delimiter边界上的分隔字符。string输入的字符串。limit如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。如果 limit 是 0,则会被当做 1。
join() 此函数是该函数的别名: implode().
strrev() 反转字符串
string strrev ( string $string )
返回 string 反转后的字符串。
trim() 去除字符串首尾处的空白字符(或者其他字符)
string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )
返回字符串 str 去除首尾空白字符后的结果。如果不指定第二个参数,trim() 将去除这些字符:
" " ,普通空格符。"\t" ,制表符。"\n",换行符。"\r" ,回车符。"\0" ,空字节符。"\x0B",垂直制表符。
ltrim() 删除字符串开头的空白字符(或其他字符)
string ltrim ( string $str [, string $character_mask ] )
rtrim() 删除字符串末端的空白字符(或者其他字符)
string rtrim ( string $str [, string $character_mask ] )
strstr() 查找字符串的首次出现
string strstr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] )
返回 haystack 字符串从 needle 第一次出现的位置开始到 haystack 结尾的字符串。(该函数区分大小写。如果想要不区分大小写,请使用 stristr()。)
haystack输入字符串。如果 needle 不是一个字符串,那么它将被转化为整型并且作为字符的序号来使用。before_needle若为 TRUE,strstr() 将返回 needle 在 haystack 中的位置之前的部分。
例子:
number_format() 以千位分隔符方式格式化一个数字
string number_format ( float $number [, int $decimals = 0 ] )
string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )
本函数可以接受1个、2个或者4个参数(注意:不能是3个):
如果只提供第一个参数,number的小数部分会被去掉 并且每个千位分隔符都是英文小写逗号","
如果提供两个参数,number将保留小数点后的位数到你设定的值,其余同楼上
如果提供了四个参数,number 将保留decimals个长度的小数部分, 小数点被替换为dec_point,千位分隔符替换为thousands_sep 。
数组处理函数
array_keys() 返回数组中部分的或所有的键名
array array_keys ( array $array [, mixed $search_value = null [, bool $strict = false ]] )
array_keys() 返回 input 数组中的数字或者字符串的键名。
如果指定了可选参数 search_value,则只返回该值的键名。否则 input 数组中的所有键名都会被返回。
例子:
100, "color" => "red");
print_r(array_keys($array)); //Array ( [0] => 0 [1] => color )
$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue")); //Array ( [0] => 0 [1] => 3 [2] => 4 )
$array = array("color" => array("blue", "red", "green"),
"size" => array("small", "medium", "large"));
print_r(array_keys($array)); //Array ( [0] => color [1] => size )
array_values() 返回数组中所有的值
array array_values ( array $array )
返回 input 数组中所有的值并给其建立数字索引。
例子:
"XL", "color" => "gold");
print_r(array_values($array)); //Array ( [0] => XL [1] => gold )
array_diff() 计算数组的差集
array array_diff ( array $array1 , array $array2 [, array $... ] )
对比 array1 和其他一个或者多个数组,返回在 array1 中但是不在其他 array 里的值。
例子:
"green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);//Array ( [1] => blue )
array_intersect() 计算数组的交集
array array_intersect ( array $array1 , array $array2 [, array $... ] )
返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。
例子:
"green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result); //Array ( [a] => green [0] => red )
array_merge() 合并一个或多个数组
array array_merge ( array $array1 [, array $... ] )
将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
例子:
"red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result); //Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 )
array_shift() 将数组开头的单元移出数组
mixed array_shift ( array &$array )
将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。使用此函数后会重置(reset())array 指针。返回移出的值,如果 array 为 空或不是一个数组则返回 NULL。
array_unshift() 在数组开头插入一个或多个单元
int array_unshift ( array &$array [, mixed $... ] )
将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。
例子:
apple [1] => raspberry [2] => orange [3] => banana )
array_pop() 弹出数组最后一个单元(出栈)
mixed array_pop ( array &$array )
array_pop() 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。使用此函数后会重置(reset())array 指针。返回 array 的最后一个值。如果 array 是空(如果不是一个数组),将会返回 NULL 。
array_push() 将一个或多个单元压入数组的末尾(入栈)
int array_push ( array &$array , mixed $value1 [, mixed $... ] )
将 array 当成一个栈,并将传入的变量压入 array 的末尾。array 的长度将根据入栈变量的数目增加。和如下效果相同:
$array[] = $var;
例子:
orange [1] => banana [2] => apple [3] => raspberry )
sort() 对数组排序
bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。
array要排序的数组。
sort_flags可选的第二个参数 sort_flags 可以用以下值改变排序的行为:
排序类型标记:
SORT_REGULAR - 正常比较单元(不改变类型)
SORT_NUMERIC - 单元被作为数字来比较
SORT_STRING - 单元被作为字符串来比较
SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
SORT_NATURAL - 和 natsort() 类似对每个单元以“自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。
SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。
参考链接:http://php.net/manual/zh/