PHP函数用法详解【初始化、嵌套、内置函数等】

本文实例讲述了PHP函数用法。分享给大家供大家参考,具体如下:

初始函数

  • 函数:封装一段用于完成特定功能的代码。
  • 通俗理解函数:可以完成魔鬼工作的代码块,就像积木一样,可以反复使用,在使用的时候,拿来即用。
  • 函数定义:1)内置函数(字符串操作函数、数组操作函数)2)自定义函数

函数的基本语法格式

	function 函数名([参数1.参数2,......]){
		函数体......
	}
  • 函数的定义由一下四部分组成:

    • 关键字function
      function: 在声明函数时必须使用的关键字;
    • 函数名functionName
      函数名: 要符合PHP的标识符,且函数名是唯一的,不区分大小写
    • 参数
      [参数1,参数2…]: 在外界传递给函数的值,他是可选的,多个参数之间使用逗号“,”分隔。
    • 函数体
      函数体: 函数定义的主体,专门用于实现特定的代码段。
      返回值: 需要使用return关键字将需要返回的数据传递给调用者。

参数设置

对于函数来说,参数的不同设置,决定了其调用和使用方式

  • 无参函数


  • 按值传递参数

    PHP默认支持按值传递参数,按此种方式定义的函数,在函数内部可以睡衣对用户传递的参数进行操作。


  • 引用传参
    在开发中,若需要函数修改它的参数值,则需要通过函数的引用传递。实现方式只需要在参数中前添加“&”符号即可。

  • 设置参数默认值

    函数参数在设置时,还可以为其指定默认值,也就是可选参数。当调用者未传递该参数时,函数将使用默认值进行操作。
    当使用默认参数时,默认参数必须放在非默认参数的右侧,否则函数可能出错。


  • 指定参数类型(弱)

    在PHP 7.0及以上的版本后,在自定义函数时,可以指定参数具体时那种数据类型
    当用户调用函数时,如果传递参数不是int类型。程序传递的参数不是int类型,程序会将其强制的转换为int型后,在进行操作,这种方式称为弱类型参数设置。


  • 指定参数类型(强)

    除此之外,还可以将其设置为强类型的参数,即当用户传递的类型不符合函数的定义,程序会报错提醒。

变量的作用域

变量在定义后,默认情况下,可以在函数中使用,函数外不可以。

  • 变量只有在其作用范围内才可以被使用,这个作用范围称为变量的作用域。
  • 在函数中定义的变量称为局部变量
  • 在函数外定义的变量称为全局变量
function test (){
		$sum = 36; //局部变量
		return $sum;
}
$sum = 0;	//全局变量
echo text();	//输出结果:36
echo $sum;	//输出结构:0

那么如何在函数中使用全局变量呢?
答:参数传递,global关键字和超全局变量$GLOBALS。

$snap = 'nihao';
function abc(){
 global $snap;//全局变量的关键词,通常加在变量前。引用全局变量
 return $GLOBALS['snap'];//引用外部变量。定义全局变量
}
echo abc();

函数的嵌套调用

嵌套调用

函数的嵌套调用: 指的是在调用一个函数的过程中,调用另外一个函数,这种在函数内调用其它函数的方式称为嵌套调用。

递归调用

递归调用: 是函数嵌套调用中一种特殊的调用。它指的是一个函数在其函数体内调用自身的过程,这种函数成为递归函数

函数的高级应用

1. 静态变量

轻松得到函数被访问的次数,一是在函数中使用全局变量记录,缺点是全局变量可随时子啊函数外被改变,不能准确的记录;二是在函数中使用静态变量。

变量的作用域

  • 局部变量: 在函数的内部定义的变量,其作用域是所在函数
  • 全局变量: 被定义在所有函数以外的变量,其作用域是整个PHP文件,但在用户自定义函数内部是不可用的。如果希望在用户自定义函数内部使用全局变量。则要使用global关键字声明
  • 静态变量: 能够在函数调用结束后仍保留变量值,当再次回到其作用域时,又可以继续使用原来的值,而一般变量在函数调用结束后,其存储的数据值将被清除,所占的内存空间被释放。使用静态变量时,先要用static来声明变量,把关键字static放在要定义的变量之前。

2.可变函数

可变函数: 可变变量,他的实现是在一个变量前添加一个“¥符号”,就变成了另外一个变量。同理,可变函数的实现就是在一个变量名后添加一对圆括号“()”,让其变成一个函数的形式,然后PHP就寻找与变量值同名的函数,并且尝试执行它

3.回调函数

回调函数: 指的就是具有callable类型的函数,一般用作参数的传递。如PHP内置函数call_user_func()可以接受用户自定义的回调函数作为参数。

4. 匿名函数

匿名函数: 就是没有函数名称的函数,也称作闭包函数,经常用作回调函数参数的值。对于临时定义的函数,使用匿名函数无需考虑函数命名冲突的问题

php的内置函数

  • 字符串函数

    字符串函数是PHP用来操作字符串的内置函数,在实际开发中有着非常重要的作用

    • 截取给定路径中的字符串
$url = 'C:\web\apache2.4\htdocs\cat.jpg';
$pos = strrpos($url, '\\');
// 截取文件名称,输出结果:cat.jpg
echo substr($url, $pos + 1);
// 截取文件所在的路径,输出结果:C:\web\apache2.4\htdocs
echo substr($url, 0, $pos);

strrpos()函数用于在$url中获取“\”最后一次出现的位置$pos。
substr()函数的第1个参数表示待截取的字符串,第2个参数表示开始截取的位置,非负数表示从字符串指定位置处截取,从0开始;负数表示从字符串尾部开始。第3个参数表示截取的长度。
substr()函数的第3个参数表示截取的长度,该长度的设置具体有以下4种情况。
省略第3个参数时,将返回从指定位置到字符串结尾的子字符串。
第3个参数为正数,返回的字符串将从指定位置开始,最多包含指定长度的字符,这取决于待截取字符串的长度。
第3个参数为负数,返回的字符串中在结尾处将有个指定长度的字符被省略。
第3个参数为0、false或null,将返回一个空字符串。
  • 替换指定位数的字符
    替换指定位数的字符,在开发也是很常见的功能。例如,在各种抽奖环节中,为了保证用户的隐私,出现的手机号一般使用“*”将第4至7位的数字进行覆盖
$tel = '18810881888';		 // 随意输入一串数字作为手机号
$len = 4; 			// 需要覆盖的手机号长度
$replace = str_repeat('*', $len); 	// 根据指定长度设置覆盖的字符串
echo substr_replace($tel, $replace, 3, $len);	// 输出结果: 188****1888

str_repeat()函数用于对“*”字符重复len次。substrreplace()函数用于对字符串 len次。substr_replace()函数用于对字符串" role="presentation" style="position: relative;">len次。substrreplace()函数用于对字符串len次。substrreplace()函数用于对字符串len次。
substr_replace()函数用于对字符串len次。substrr​eplace()函数用于对字符串tel中第3个位置开始后的len长度的字符使用 len长度的字符使用" role="presentation" style="position: relative;">len长度的字符使用len长度的字符使用len长度的字符使用len长度的字符使用replace进行替换。

  • 数字函数

    为了方便开发人员处理程序中的数学运算,PHP内置了一系列的数学函数,用于获取最大值、最小值、生成随机数等常见的数学运算。

echo ceil(5.2);	// 输出结果:6
echo floor(7.8);	// 输出结果:7
echo rand(1, 20);	// 随机输出1到20间的整数

ceil()函数是对浮点数5.2进行向上取整,
floor()函数是对浮点数进行向下取整,
rand()函数的参数表示随机数的范围,第1个参数表示最小值,第2参数表示最大值。

  • 时间日期函数

    在使用PHP开发Web应用程序时,经常会涉及日期和时间管理。
    例如倒计时、用户登录时间、新闻发布时间、购买商品时下订单的时间等。
    为此,PHP提供了内置的日期和时间处理函数,满足开发中的各种需求。

    Unix时间戳是一种时间的表示方式,它是为了解决编程环境中时间运算的问题。

    Unix时间戳(Unix timestamp): 定义了从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数,以32位二进制数表示。

echo time();			// 输出结果:1487666317
echo mktime(0, 0, 0, 2, 21, 2017);	// 输出结果:1487606400
echo strtotime('2017-2-21');	// 输出结果:1487606400
echo microtime();			// 输出结果:0.04142600 1487666098
echo microtime(true);		// 输出结果:1487666098.0414

time()函数用于获取当前时间的Unix时间戳,
mktime()和strtotime()函数可将给定的日期时间转换成Unix时间戳,前者的参数分别表示“时分秒月日年”,后者可以是任意时间的字符串。
函数microtime()用于获取当前Unix时间戳和微秒数,不设置参数时,返回值的形式前面一段数字表示微妙数,后面一段数字表示秒数;设置参数时,小数点前表示秒数,小数点后表示微秒数。

格式化时间戳: 对于用户来说,时间戳的直接输出,会让其看到一个毫无意义的整型数值。为了将时间戳表示的时间以友好的形式显示出来,可以对时间戳进行格式化。

echo date('Y-m-d H:i:s');		// 输出结果:2017-02-21 16:48:16
echo date('Y-m-d', 1487666317);	// 输出结果:2017-02-21

date()函数第1个参数表示格式化日期时间的样式
date()函数第2个参数表示待格式化的时间戳,省略时表示格式化当前时间戳。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

(0)

相关推荐

  • PHP树的代码,可以嵌套任意层

    PHP树的代码,可以嵌套任意层 <?file://建立树的主要函数,传递的参数为根节点的编号和根节点的标题function create_tree($rootid,$roottilte){  print_parent_from_rootsortid($rootid,$roottilte);}file://打印根节点div头的函数function print_parent_from_rootsortid($rootid,$roottilte){  $parent_fullname="R&qu

  • php利用嵌套数组拼接与解析json的方法

    利用嵌套数组   拼接混合json -包含对象数组 <?php // 自 PHP 5.4 起 $array = [ "status" => "0", "message" => "ok", "arr"=> [] ]; class Person { public $name; public $age; //定义一个构造方法初始化赋值 public function __construct

  • PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)

    fixHtmlTag version 0.2 这个版本解决了上次遗留的问题,即就近闭合和嵌套闭合问题.具体可以看代码的注释. 复制代码 代码如下: <?php /** * fixHtmlTag * * HTML标签修复函数,此函数可以修复未正确闭合的 HTML 标签 * * 由于不确定性因素太多,暂时提供两种模式"嵌套闭合模式"和 * "就近闭合模式",应该够用了. * * 这两种模式是我为了解释清楚此函数的实现而创造的两个名词, * 只需明白什么意思就行.

  • PHP中的函数嵌套层数限制分析

    函数嵌套,这个名字有点纠结,也许不太好理解.一个比较常见的函数嵌套特例:递归函数,即函数自己嵌套自己. 一直以为在PHP中不能有太多的函数嵌套,这是因为在以前某些时候不小心用到了递归,在递归的深度达到100时, 即函数嵌套的层数达到100时,程序会报一个 Fatal error.如下示例: 复制代码 代码如下: function rt() { static $i; echo $i++, '<br />'; rt(); } rt(); die(); 在我的win7 + php5.3的环境下报错如

  • PHP中实现MySQL嵌套事务的两种解决方案

    一.问题起源 在MySQL的官方文档中有明确的说明不支持嵌套事务: 复制代码 代码如下: Transactions cannot be nested. This is a consequence of the implicit commit performed for any current transaction when you issue a START TRANSACTION statement or one of its synonyms. 但是在我们开发一个复杂的系统时难免会无意中在

  • PHP优化教程之解决嵌套问题

    在开发过程中,我们经常遇到一对多的场景, 例如:查询订单列表,并且展示订单详情商品.数量数据 思路0:传统做法 a. 查询订单列表 b. 遍历订单详情 $orderList = select * from order where xx; foreach($orderList as $orderItem) { $orderItem->detailList = select * from order_detail where order_id = $orderItem->id; } 分析:查询SQ

  • PHP嵌套输出缓冲代码实例

    PHP的输出缓存是可以嵌套的.用ob_get_level()就可以输出嵌套级别. 测试发现在cli和浏览器下输出结果不一样(PHP5.4). 手册说明如下: ob_get_level() will always return 0 inside a destructor. This happens because the garbage collection for output buffers has already done before the destructor is called 想要

  • php无限级评论嵌套实现代码

    我在设计BB的过程中,也一直在思考是否可以不通过递归来实现无限级分类的结构展现和父子结构查找,因为如果不对这里的算法进行优化后果可能是致命的!试想一下,一篇文章如果评论数为300,按正常的递归算法,至少就得查询数据库301次,而且还是在没有任何嵌套的情况下,如果有过一两级嵌套或者评论数过1000,那数据库不是直接宕掉? 而实际上,PHP强大的数组处理能力已经能帮助我们快速方便的解决这个问题.下图为一个无限级分类的 数据库结构: IDparentID newsID commts 108文章ID为8

  • Python的Lambda函数用法详解

    在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数.今天我就和大家聊聊lambda函数,在Python编程中,大家习惯将其称为表达式. 1.为什么要用lambda函数? 先举一个例子:将一个列表里的每个元素都平方. 先用def来定义函数,代码如下 def sq(x): return x*x map(sq,[y for y in range(10)]) 再用lambda函数来编写代码 map(lambda x: x*x,[y for y in r

  • JavaScript中eval()函数用法详解

    eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行. 如果参数是一个表达式,eval() 函数将执行表达式.如果参数是Javascript语句,eval()将执行 Javascript 语句. 语法 复制代码 代码如下: eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. eval()函数用法详解: 此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eva

  • python yield和Generator函数用法详解

    这篇文章主要介绍了python yield和Generator函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写 import math def is_Prims(number): if number == 2: return True //除2以外的所有偶数都不是素数 elif number % 2 == 0: return False //如果一个数能被除1和

  • C语言fgetc和fputc函数用法详解(以字符形式读写文件)

    在C语言中,读写文件比较灵活,既可以每次读写一个字符,也可以读写一个字符串,甚至是任意字节的数据(数据块).本节介绍以字符形式读写文件. 以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符.主要使用两个函数,分别是 fgetc() 和 fputc(). 字符读取函数 fgetc fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符.fgetc() 的用法为: int fgetc (FILE *fp); fp 为文件指针.fgetc() 读

  • Python中flatten( )函数及函数用法详解

    flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组. flatten只能适用于numpy对象,即array或者mat,普通的list列表不适用!. a.flatten():a是个数组,a.flatten()就是把a降到一维,默认是按行的方向降 . a.flatten().A:a是个矩阵,降维后还是个矩阵,矩阵.A(等效于矩阵.getA())变成了数组.具体看下面的例子: 1.用于array(数组)对象 >>> from n

  • pytorch中torch.max和Tensor.view函数用法详解

    torch.max() 1. torch.max()简单来说是返回一个tensor中的最大值. 例如: >>> si=torch.randn(4,5) >>> print(si) tensor([[ 1.1659, -1.5195, 0.0455, 1.7610, -0.2064], [-0.3443, 2.0483, 0.6303, 0.9475, 0.4364], [-1.5268, -1.0833, 1.6847, 0.0145, -0.2088], [-0.86

  • python isinstance函数用法详解

    这篇文章主要介绍了python isinstance函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 isinstance() 函数来判断一个对象是否是一个已知的类型类似 type(). isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关系. isinstance() 会认为子类是一种父类类型,考虑继承关系. 如果要判断两个类型是否相同推荐使用 isinstance(). 语法

  • C++ min/max_element 函数用法详解

    同样是O(n)复杂度,但是经过不严谨 测试,使用库函数的速度远超for循环的遍历找最值 /* param begin : 序列起始地址(迭代器) param end : 序列结束地址(迭代器) return : 序列中最小元素地址(迭代器) */ min_element(begin, end); /* param begin : 序列起始地址(迭代器) param end : 序列结束地址(迭代器) return : 序列中最大元素地址(迭代器) */ max_element(begin, en

  • pandas dataframe 中的explode函数用法详解

    在使用 pandas 进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于 hive sql 中的 explode 函数. 这个函数如下: Code # !/usr/bin/env python # -*- coding:utf-8 -*- # create on 18/4/13 import pandas as pd def dataframe_explode(dataframe, fieldname): temp_fieldname = fieldname

  • C++ getline函数用法详解

    虽然可以使用 cin 和 >> 运算符来输入字符串,但它可能会导致一些需要注意的问题. 当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格.制表符或换行符).一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取.以下面的语句为例: cin >> namel; 可以输入 "Mark" 或 "Twain",但不能输入 "Mark Twain",因为 cin 不能输入包含嵌入空格的字符串

随机推荐