变量的作用域和静态变量

变量的作用域

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

<?php
$outer = 'str';//全局变量
function myfunc()
{
echo $outer;//局部变量
}
//全局变量默认不能直接拿到函数内部使用,如果要使用,需要用到global关键字
function myfunc2()
{
global $outer;
echo $outer;// $GLOBALS['outer'];//使用$GLOBALS数组也可以访问到全局变量
}

静态变量

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

static关键字

  1. 仅初始化一次
  2. 初始化时需要赋值
  3. 每次执行函数该值会保留
  4. static修饰的变量是局部的,仅在函数内部有效
  5. 可以记录函数的调用次数,从而可以在某些条件下终止递归
<?php
function myFunc()
{
static $a = 1;
echo $a ++;
}
myFunc();//1
myFunc();//2

例题

<?php

$count = 5;
function get_count()
{
static $count;
return $count++;
}
echo $count;// echo 5
++$count;// $count = 6 echo get_count();//进入函数内部,static $count 并没有对$count 进行赋值,因此$count=NULL,return $count++,返回$count 的值,并对$count自增,因此此时echo的是NULL 也就是没有输出
echo get_count();//return $count++ ,返回$count,$count在上次自增后结果为1(NULL++ 是1),因此echo 1

函数的参数及参数的引用传递

默认情况下,函数的参数传递是值传递,要想在函数内部改变参数的值,需要使用引用传递。引用传递使用&

引用传递只能传递变量,不允许传递值。

函数的返回值及引用返回

  • 值通过使用可选的返回语句(return)返回
  • 可以返回包括数组和对象的任意类型
  • 返回语句会终止函数执行,将控制权交回函数调用处
  • 省略return,返回值为NULL,不可有多个返回值(如果想返回多个值,可以反回一个数组)
  • 从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符&
<?php

function &myFunc()
{
static $b = 10;
return $b;
}
$a = myFunc();//10
$a = &myFunc();//$a 指向了 $b
$a = 100;//$b 也变成了 100
echo myFunc();//100

外部文件的导入

include/require语句包含并运行指定文件

如果给出路径名则按照路径来找,

否则从include_path中查找,如果include_path中也没有,则从调用脚本文件所在的目录和当前工作目录下寻找

当一个文件被包含时,其中所包含的代码继承了include所在行的变量范围。

加载过程中未找到文件则include 结构会发出一条警告(E_WARNING);这一点和require不同,require会发出一个致命错误(E_COMPILE_ERROR)

系统内置函数

时间日期函数

date()函数

date() 函数把时间戳格式化为更易读的日期和时间。

语法:date(format,timestamp)

参数 描述
format 必需。规定时间戳的格式。
timestamp 可选。规定时间戳。默认是当前时间和日期。

常用于日期的格式字符:

  • d - 表示月里的某天(01-31)
  • m - 表示月(01-12)
  • Y - 表示年(四位数)
  • 1 - 表示周里的某天
<?php
echo "今天是 " . date("Y/m/d") . "<br>";
echo "今天是 " . date("Y.m.d") . "<br>";
echo "今天是 " . date("Y-m-d") . "<br>";
echo "今天是 " . date("l");//周几(friday)
?>

常用于时间的格式字符:

  • h - 带有首位零的 12 小时小时格式
  • i - 带有首位零的分钟
  • s - 带有首位零的秒(00 -59)
  • a - 小写的午前和午后(am 或 pm)

strtotime()函数

strtotime() 函数将任何英文文本的日期或时间描述解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数)。

注意:如果年份表示使用两位数格式,则值 0-69 会映射为 2000-2069,值 70-100 会映射为 1970-2000。

注意:请注意 m/d/y 或 d-m-y 格式的日期,如果分隔符是斜线(/),则使用美洲的 m/d/y 格式。如果分隔符是横杠(-)或者点(.),则使用欧洲的 d-m-y 格式。为了避免潜在的错误,您应该尽可能使用 YYYY-MM-DD 格式或者使用 date_create_from_format() 函数。

mktime()函数

mktime(hour,minute,second,month,day,year,is_dst);

参数 描述
hour 可选。规定小时。
minute 可选。规定分。
second 可选。规定秒。
month 可选。规定月。
day 可选。规定天。
year 可选。规定年。
is_dst 可选。如果时间在夏令时 (DST) 期间,则设置为 1,否则设置为 0,若未知则设置为 -1(默认)。

time()函数

返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数。(unix时间戳)

microtime()函数

返回当前 Unix 时间戳的微秒数。

microtime(get_as_float);

参数 描述
get_as_float 可选。当设置为 TRUE 时,规定函数应该返回浮点数,否则返回字符串。默认为 FALSE。

date_default_timezone_set()函数

设置默认时区

<?php
date_default_timezone_set("Asia/Shanghai");
echo date_default_timezone_get();
?>

ip处理函数

ip2long()函数

函数 ip2long() 返回 IPV4 网络地址的长整型格式,从标准网络地址格式(点字符串)转化得到。

long2ip()函数

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

打印处理函数

print()函数

语言结构,只能打印一个变量

printf()

根据格式输出

print_r()

会将数组、对象格式化好之后输出

echo()

语言结构,可以打印多个变量,用逗号隔开

sprintf()

根据格式返回,不输出

var_dump()

会将数组、对象格式化好之后输出,并显示数据类型

var_export()

将数组格式化后输出,可返回合法的php代码

序列化及反序列化函数

serialize()函数

unserialize()函数

字符串处理函数

implode()函数

将一个一维数组的值转化为字符串

explode()函数

使用一个字符串分割另一个字符串

join()函数

implode()函数的别名

str_replace()函数

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。

如果没有一些特殊的替换需求(比如正则表达式),你应该使用该函数替换 ereg_replace() 和 preg_replace()。

数组处理函数

array_keys()

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

array_values()

返回数组中所有的值

array_diff()

计算数组的差集

array_intersect()

计算数组的交集

array_merge()

合并数组

array_shift()

将数组开头的单元移出数组

array_unshift()

在数组开头插入一个或多个单元

array_pop()

弹出数组最后一个单元(出栈)

array_push()

将一个或多个单元压入数组的末尾(入栈)

PHP自定义函数及内部函数考察点的更多相关文章

  1. php基础知识考察点:自定义函数及内部函数考察点

    1.变量的作用域和静态变量 函数的参数以及参数的引用传递 函数的返回值以及引用返回 外部文件的导入 系统内置函数的考察 变量的作用域也称为变量的范围,变量的范围即他定义上下文的背景(也是它生效的范围) ...

  2. PHP面试 PHP基础知识 五(自定义函数和内部函数)

    自定义函数 变量的作用域和静态变量 变量的作用域:变量的作用域也成为变量的范围,变量的范围即它定义上的上下文背景(也就是它生效的范围). 大部分的PHP变量只有一个单独的范围.这个单独的范围跨度同样包 ...

  3. php自定义函数之内部函数

    内部函数,是指在函数内部又声明了一个函数. 注意事项: 1.内部函数名,不能是已存在的函数名 2.假设在函数a里面定义了一个内部函数,不能定用两次函数a. 我们下面来看代码,你将很快的学习会: < ...

  4. php面试笔记(5)-php基础知识-自定义函数及内部函数考点

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而函数相关的考点 ...

  5. LR自定义函数以及调用

    2.2.自定义函数以及调用 2.2.1.虚拟用户编程,使用C# 语言DLL 在VS中建立DLL类库项目,编写函数时使用public声明:实现函数后编译生成DLL: 在LR中建立 .Net Vuser脚 ...

  6. Oracle自定义函数1

    用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样,如max(value)函数,其中,value被称为参数.函数参数有3种类型. IN 参数类型:表示输入给函数的参数 ...

  7. Oracle自定义函数

    核心提示:函数用于返回特定数据.执行时得找一个变量接收函数的返回值; 语法如下: create or replace function function_name ( argu1 [mode1] da ...

  8. asp.net中调用javascript自定义函数的方法(包括引入JavaScript文件)总结

    通常javascript代码可以与HTML标签一起直接放在前 端页面中,但如果JS代码多的话一方面不利于维护,另一方面也对搜索引擎不友好,因为页面因此而变得臃肿:所以一般有良好开发习惯的程序员都会把 ...

  9. python 自定义函数

    200 ? "200px" : this.width)!important;} --> 介绍 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参 ...

随机推荐

  1. 用css解决Unigui在IE系列浏览器中字体变小的问题(设置UniServeModule的customcss属性)

    Unigui运行在chrome浏览器下可以有最佳的效果,但用ie打开用unigui做的项目会发现字体明显小一截,可以用自定义css来解决这个问题. 可以在UniServeModule的customcs ...

  2. 记一次部署java项目的问题

    项目里面有自动化任务, tomcat 错误信息 Table 'xxx.QRTZ_TRIGGERS' doesn't exist 提示在mysql中找不到这个表. 但mysql中确实存在,但名字是:qr ...

  3. CentOS7.2 设置GRUB2引导界面分辨率

    最近在学习OS引导启动,GRUB2的学习材料也不少,主要还看官方手册清晰些. 公司里办公机的多启动用的ubuntu的界面,还挺炫酷的.之前看其他博客网文里看到可以设置grub2的分辨率,我拿CentO ...

  4. 如何完成dedecms外部数据库调用|跨数据库数据调用

    第1步:打开网站include\taglib文件夹中找到sql.lib.php文件,并直接复制一些此文件出来,并把复制出来的这个文件重命名为mysql.lib.php. 注:mysql.lib.php ...

  5. mac系统下配置aapt环境变量

    在当前用户目录下新建.bash_profile文件,执行以下命令: vi .bash_profile 然后保存,输入命令  :wq 最后使命令生效,执行命令 source .bash_profile

  6. 五.OC基础--1.多态,2.类对象,3.点语法,4.@property&@synthesize,5.动态类型,内省(判断对象是否遵循特定的协议,以及是否可以响应特定的消息)

    五.OC基础--1.多态, 1. 多态概念,定义:多态就是某一类事物的多种形态: 表现形式: Animal *ani = [Dog new]; 多态条件:1.有继承关系 2.有方法的重写 2.多态代码 ...

  7. 并不对劲的bzoj3277

    陈年老坑 题意大概是有n个字符串,要求出每一个字符串的所有子串(不包括空串)在所有字符串(包括自身)中出现次数不少于k的有多少个.n,k,字符串总长<=100000. 如果只有一个串的话,非常好 ...

  8. 乐搏讲自动化测试-Python适用公司类型(6)

    相信小伙伴们都知道,随着软件测试行业的发展和进步自动化测试已经成为必然.在竞争日益激烈的市场环境中也是你升职加薪的利器. 所以,小编决定从今天起!将要系统.连续.高质量的持续更新「整套自动化测试」文章 ...

  9. web项目tomcat启动url自定义(去掉项目名)

    通常,使用maven构建web项目,启动时默认的访问路径: http://ip:port/项目名 很多时候我们不喜欢这样 访问,我们希望下面的访问方式: http://ip:port 如果是本地的to ...

  10. AutoCAD2012启动错误 1308 源文件未找到

    启动AutoCAD2012时,弹出错误1308,如图所示: 是何原因? 对CAD的运行有何影响?