PHP基础复习(五)——自定义函数及内部函数

前言

本系列文章主要是根据实战视频《360大牛:全面解读PHP面试》学习过程中记录的学习笔记,期间也会加入查找资料和平时学习中学习到的知识。

变量的作用域

变量的作用域也称变量的范围,变量的范围即它定义的上下文背景(也是它的生效范围)。大部分的PHP变量只有一个单独的范围。这个单独的范围跨度同样包含了include和require引入的文件。

在函数体内部引用外部变量,可以使用global关键字,$GLOBALS及其他超全局数组。

<?php 
   $outer = 'str';      //全局变量

    function myfunc() {

        global $outer;

        echo $outer;

    }

   //   也可以使用$GLOBALS

    $outer = 'str';      //全局变量

    function myfunc() {

        $outer =  $GLOBALS['outer'];

        echo $outer;

    }

 

静态变量

静态变量仅在局部函数域中存在,当程序执行离开此作用域时,其值并不会消失。

static关键字

1.仅初始化一次;

2.初始化时需要赋值;

3.每次执行函数该值会保留;

4.static修饰的变量是局部的,仅在函数内部有效;

5.可以记录函数的调用次数,从而可以在某些条件下终止递归。

 

函数的参数

默认情况下,函数参数通过值传递。

如果希望允许函数修改它的值,必须通过引用传递参数

 

函数的返回值

值通过使用可选的返回语句(return)返回。

可以返回包括数组和对象的任意类型。

返回语句会中止函数执行,将控制权交回函数调用处。

省略return ,返回值为NULL,不可以有多个返回值。

 

函数的引用返回

从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符&。

<?php
function &myfunc(){

    static $b = 10;   //若无static修饰,则$b是局部变量,当执行完函数会被回收

    return $b;

}

$a = myfunc();    //$a=10

$a = &myfunc();   //$a=10

$a = 100;

echo myfunc();   //输出100

 

外部文件的导入

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()。

例子:

<?php
echo date('Y-m-d H:i:s');        //2018-12-04 16:15:35

 

strtotime()  将任何字符串的日期时间描述解析为 Unix 时间戳

int strtotime ( string $time [, int $now = time() ] )

接受一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数),其值相对于 now 参数给出的时间,如果没有提供此参数则用系统当前时间。

例子:

<?php
echo strtotime("+1 week 2 days 4 hours 2 seconds");  //1544703602

 

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 时间戳。

例子:

<?php
echo mktime();   //1543912036

time()   返回当前的 Unix 时间戳

int time ( void )

例子:

<?php
echo time();   //1568556893

microtime()   返回当前 Unix 时间戳和微秒数

mixed microtime ([ bool $get_as_float ] )

例子:

<?php
list($usec, $sec) = explode(" ", microtime());

echo ((float)$usec + (float)$sec);    //  1543912351.4336

 

date_default_timezone_set()  设定用于一个脚本中所有日期时间函数的默认时区

bool date_default_timezone_set ( string $timezone_identifier )

如果 timezone_identifier 参数无效则返回 FALSE,否则返回 TRUE。

例子:

<?php
date_default_timezone_set('Asia/Shanghai');

$tz = date_default_timezone_get();

echo $tz;    //Asia/Shanghai

 

IP处理函数

ip2long()  将 IPV4 的字符串互联网协议转换成长整型数字

int ip2long ( string $ip_address )

 返回 IPV4 网络地址的长整型格式,从标准网络地址格式(点字符串)转化得到。返回IP地址转换后的数字 或 FALSE 如果 ip_address 是无效的。

例子:

<?php
$ip = gethostbyname('www.baidu.com');

$long = ip2long($ip);


if ($long == -1 || $long === FALSE) {
    echo 'Invalid IP, please try again';
} else {
    echo $ip . "\n";      // 180.97.33.107
    echo $long . "\n";    // 3026264427
    printf("%u\n", ip2long($ip));    // 3026264427
}

long2ip()   将长整型转化为字符串形式带点的互联网标准格式地址(IPV4)

string long2ip ( int $proper_address )

通过长整型的表达形式转化生成带点格式的互联网地址(例如:aaa.bbb.ccc.ddd )。

例子:

<?php
echo long2ip(3026264427);     //180.97.33.107

 

打印处理

print()  输出字符串

int print ( string $arg )

输出 arg。print 实际上不是函数(而是语言结构),所以可以不用圆括号包围参数列表。和 echo 最主要的区别: print 仅支持一个参数,并总是返回 1。

printf()    输出格式化字符串

int printf ( string $format [, mixed $args [, mixed $... ]] )

依据 format 格式参数产生输出。

例子:

<?php
$num = 5;

$location = 'tree';

$format = 'There are %d monkeys in the %s';

echo printf($format, $num, $location); //There are 5 monkeys in the tree31

 

print_r()   以易于理解的格式打印变量。

mixed print_r ( mixed $expression [, bool $return = FALSE ] )

以人类易读的格式显示一个变量的信息。

print_r()、 var_dump()、 var_export() 都会显示对象 protected 和 private 的属性。 Class 的静态属性(static) 则不会显示。

例子:

<?php
$a = array ('a' => '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 $... ] )

显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

例子:

<?php
$a = array(1, 2, array("a", "b", "c"));

var_dump($a);

 

var_export()   输出或返回一个变量的字符串表示

mixed var_export ( mixed $expression [, bool $return ] )

通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。

例子:

<?php
$a = array (1, 2, array ("a", "b", "c"));

var_export ($a);  //array ( 0 => 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  想要转换的数组.

例子:

<?php
$array = array('lastname', 'email', 'phone');

$str = implode(",", $array);

echo $str; //lastname,email,phone

 

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 中的位置之前的部分。

例子:

<?php
$email = 'name@example.com';

$domain = strstr($email, '@');

echo $domain; // 打印 @example.com


$user = strstr($email, '@', true); // 从 PHP 5.3.0 起

echo $user; // 打印 name

              

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 。

<?php
$number = 1234.56;

$english_format_number = number_format($number);// 1,235

$nombre_format_francais = number_format($number, 2, ',', ' ');// 1 234,56

$number = 1234.5678;

$english_format_number = number_format($number, 2, '.', '');// 1234.57

 

数组处理函数

array_keys()   返回数组中部分的或所有的键名

array array_keys ( array $array [, mixed $search_value = null [, bool $strict = false ]] )

array_keys() 返回 input 数组中的数字或者字符串的键名。

如果指定了可选参数 search_value,则只返回该值的键名。否则 input 数组中的所有键名都会被返回。

例子:

<?php
$array = array(0 => 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 数组中所有的值并给其建立数字索引。

例子:

<?php
$array = array("size" => "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 里的值。

例子:

<?php
$array1 = array("a" => "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 中也同时出现在所有其它参数数组中的值。注意键名保留不变。

例子:

<?php
$array1 = array("a" => "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 $... ] )

将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

例子:

<?php
$array1 = array("color" => "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 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

例子:

<?php
$queue = array("orange", "banana");

array_unshift($queue, "apple", "raspberry");

print_r($queue); //Array ( [0] => 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;

例子:

         

<?php
$stack = array("orange", "banana");

array_push($stack, "apple", "raspberry");

print_r($stack); //Array ( [0] => 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/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值