3.1 初识函数

3.1.1 函数的定义

  语法:

function 函数名([参数1,参数2,......])
{
函数体
}

  (1)function:在声明函数时必须使用的关键字

  (2)函数名:创建函数的名称,是有效的PHP标识符

     ①函数名是唯一的,不能重复定义;

     ②由字母、数字、下划线组成,必须以英文字母或者下划线开头;

     ③函数名不区分大小写,常量和变量区分大小写;

     ④采用骆驼命名法,第一个单词首字母小写,后续单词首字母大写;(建议)

     ⑤获取数据以get开头,设置数据以set开头,删除数据以del开头;(建议)

   (3)[参数1,参数2......]:外界传递给函数的值,可选。当有多个参数时,各参数用“,”隔开。

     ①形参

      a.定义时候,设置形参参数列表,在函数调用时,将相应的参数传递到函数内部进行加工给处理。

     ②默认值

      a.参数较多的情况下,参数值比较固定时,某个参数的值可能不变,可以设置默认值。 function fun($para1,$para2=3) { } //$para2为默认阐述

      b.调用时,没有为有默认值的参数传递参数,则自动使用默认值。设置了形参默认值,同样可以在调用时传递实参。

      c.有默认值的形参,该参数尽量靠后设置。

      d.默认值不可以是变量。

     ③实参

      a.调用时将数据传递给对应的形参。实参可以是具体的值,也可以为变量。要与形参的个数一致。       

    (4)函数体:函数定义的主体,专门用以实现特定的功能

3.1.2 函数的调用

  遵循先声明后调用原则。实际上,调用的位置可以在声明位置之前,不违背先声明后调用原则。PHP执行的第一阶段为预编译,将函数代码存放在内存的代码区,执行阶段,使用函数名字调用函数。

  语法:

     函数名([参数1,参数2...])

3.1.3 函数的返回值

  在调用一个函数后,能得到处理结果,这个结果就是函数返回值。在PHP函数中,使用return语句可以将返回值传递给调用者。

  return功能:

  ①将数据返回到调用的地方,调用函数的位置要接收,否则返回值无意义;

  ②结束函数的执行,return后面的语句不执行,最多可以执行一个return语句;

  ③return语句不能一次性返回多个值,但可以通过一个返回一个数组来是实现;

  ④尽量使用return语句返回信息,而不是直接输出;

3.2 函数的高级应用

3.2.1 函数中变量的作用域

  变量需要先定义才能使用,但并不意味着变量定义后就可以随时使用。变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域。在函数中定义的变量称为局部变量,在函数外定义的变量称为全局变量。函数外部定义的变量,在函数内部无法使用;函数内部定义的变量,函数外部无法使用。

  示例:

<?php
$name='欧阳华夏';
//定义函数
function getName(){
echo $name;
} //调用函数
getName();//报错:Notice:Undefined variable:name in F:\Site\site2\index.php on line 10 在函数内部name的值为
?>

  从上述示例代码看出,程序提示变量$name未定义,$name的值也没有输出。说明在这种情况下,函数内部不能使用定义在函数外部的变量,

  如果希望在函数内部使用函数外面的变量,需要在函数内部使用关键字 global 修饰变量。如下:

<?php
$name='欧阳华夏';
//定义函数
function getName(){
global $name;
echo $name;
}
//调用函数
getName();//输出结果是欧阳华夏
?>

  由此可见,使用关键字 global 可以手动的将函数中使用的变量变为全局变量。

  局部作用域与全局作用域的关系:

  全局作用域与局部作用域没有交集,不同函数的作用域,也没有交集。

            

  超全局变量(预定义全局变量)$GLOBALS

  如何在局部作用域使用全局变量或者在全局作用域使用局部变量?

  $GLOBALS是一个包含了全部变量的全局组合数组,变量的名称就是数组的键。

  $GLOBALS专门用来实现数据的超全局化的超全局变量。作用是引用全局作用域中的全部全局变量。

  代码如下:

<?php
$name='欧阳华夏';
//定义函数
function getName(){
//使用$GLOBALS访问全局变量
echo "在函数内部name的值为:" . $GLOBALS["name"];
}
//调用函数
getName();//输出结果---->在函数内部name的值为:欧阳华夏
?>

  注意:

  ①创建一个全局变量,系统会自动在$GLOBALS中创建变量名为下表的元素;

  ②在$GLOBALS中添加元素,自动创建相应名字的全局变量;

  ③删除或修改$GLOBALS数组的元素,会导致全局变量同步删除或修改;

3.2.2 可变函数

  PHP支持可变函数的概念,即一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并尝试执行它。

  代码:

<?php
function test(){
echo "可变函数的本真函数";
}
//定义变量,将上述函数赋值给该函数
$var="test";
$var();//结果是:可变函数的本真函数
?>

  注意:在变成过程中,尽量少用或者不用可变函数。

3.3 字符串相关函数

3.3.1 常见的字符串定义语法

  单引号:

  ①不解析变量

  ②单引号中包括单引号需要转义

  ③单引号中可以包括双引号

  双引号:

  ①可以解析变量

  ②变量最好使用变量{}边界符号

  ③单引号与双引号嵌套问题:只有最外层是双引号时,才能解析变量

  heredoc字符串定义结构

  单引号和双引号,在多行字符串、复杂字符串如JS代码的定义时显得不便

  语法:

$str = <<<heredoc标记名
字符串内容
heredoc标记名;

  注意事项:

  • 以<<<开头,其后跟着自定义的标识符。命名遵循PHP标识符命名规范;
  • 在换行的位置,开始字符串的书写;
  • 字符串书写完成后,换行输入原先自定义的标识符。标识符必须为本行第一列;
  • 两处的标识符必须一致;
  • 可以解析变量。单引号和双引号不需要转义或者处理。一般用于保存较长字符串或者JS代码;

3.3.2 字符串的长度问题

  单字节字符串的字节数(等于字符串)----------strlen();

<?php
//strlen(字符串)
$length=strlen("welcome to China");
echo $length;//结果是:16
?>

  多字节字符串的字节数(一个汉字占三个字节)----------mb_strlen();

/*
PHP提供多字节字符串扩展模块php_mbstring.dll(动态链路库文件)。开启该扩展后,可以使用mb_strlen函数来统计多字节字符串的字符长度。
*/
mb_strlen(字符串)

3.3.3 字符串大小写转换

   string strtolower (string $string)  将$string中所有的字母字符转换为小写并返回;

   string strtoupper (string $string)  将$string中所有的字母字符转换为大写并返回;

   string ucfirst    (string $string)  将$string的首字符(如果首字符是字母)转换为大写字母并返回;

3.3.4 去除首尾空白字符

   string trim ( string $string)  将$string去除首尾空白字符并返回;

   string ltrim ( string $string) 将$string去除左边空白字符并返回;

   string rtrim ( string $string) 将$string去除右边空白字符并返回;

3.3.5 字符串重复与替换

   str_replace ( mixed $search , mixed $replace , mixed $subject )  该函数返回一个字符串或者数组,该字符串或者数组是将subject中所有的search替换为replace的结果;

   string str_repeat ( string $input , int $multiplier ) 返回input重复multiplier次后的结果;

3.3.6 字符串输出函数printf()

   printf ( string $format [, mixed $args [, mixed $... ]] ) 依据format格式参数产生输出;

  占位符:%d:十进制有符号整数    %s:字符串

  参数列表与占位符一一对应

  代码: 

<?php
$name="欧阳华夏";
$age=18;
printf("我的名字是:%s,我今年%d岁了!",$name,$age);
//输出结果:我的名字是:欧阳华夏,我今年18岁了!
?>

3.3.7 查找字符串中某些字符首次出现的位置

   strpos(目标字符串,要查找的子字符串); 查找子字符串在目标字符串中首次出现的位置,从左侧开始查找,下标从0开始;

   strrpos(目标字符串,要查找的子字符串); 从右侧开始查找,查找子字符串在目标字符串中首次出现的位置,下标从0开始;

3.3.8 截取子字符串函数

   substr(目标字符串,起始下标[,截取的长度]); 截取指定位置开始的子字符串,省略第三个参数,直接截取到末尾;

   strchr(目标字符串,截取的起始子字符串);  从左侧,自字符串出现的位置截取到末尾;

   strrchr(目标字符串,截取的起始子字符串); 从右侧,自字符串出现的位置截取到末尾;

3.3.9 字符串的分割

   explode(分隔符,目标字符串); 将目标字符串根据分隔符分割,返回子字符串组成的数组;

      str_split($str[,子字符串的长度=1]);  将字符串分成指定长度(默认为1字节)的子字字符串。返回数组;

3.3.10 数组转为字符串

   implode(连接的字符,数组);  将数组的元素使用连接字符串拼接成新的字符串;

3.4 日期和时间管理

3.4.1 UNIX时间戳

  PHP中提供了UNIX时间戳用以解决时间运算的问题。UNIX时间戳是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。

3.4.2 常用的日期函数

  1、time()

  返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数,即时间戳。为10位整型数字。通常用于保存文章的发布时间、商品的发布时间等。

  2、date()

  时间戳为整型数字,无法之间使用,需要先使用的date函数格式化时间戳。

   string date ( string $format [, int $timestamp ] )

  返回将整数 timestamp 按照给定的格式字串而产生的字符串。如果没有给出时间戳则使用本地当前时间。换句话说,timestamp 是可选的,默认值为 time()。

  最常用的格式为:Y-m-d H:i:s    (2017-09-13 02:13:14),常用来生成文件名(’Ymd-His’)

  3、strtotime()

  将时间字符串转换为时间戳。

3.5 数学函数

  • max(),min()--分别返回一组数的最大值及最小值
  • abs()--返回绝对值
  • floor()--向下取整
  • ceil()--向上取整
  • round()--四舍五入
  • rand() 和 mt_rand()--返回随机数,可以取到两端的值。mt_rand生成的速度比rand快四倍多

PHP-----PHP程序设计基础教程----第三章函数的更多相关文章

  1. 【Java】《Java程序设计基础教程》第一章学习

    一.Java概述 1.介绍了Java语言的由来 2.Java语言的特点:简单.面向对象.分布式.高效解释执行.健壮.安全.结构中立.可移植.高效率.多线程.动态 3.Java语言的实现机制,引入虚拟机 ...

  2. 【Java】《Java程序设计基础教程》第二章学习

    一.标识符 Java 中标识符的使用有如下规定:(1)标识符由字母.数字.美元符号”$”和下划线”_”组成,除此之外的任何其他符号是不能作为标识符使用的.(2)标识符中的第一个字符不能为数字.  (3 ...

  3. PHP-----PHP程序设计基础教程----第四章数组

    4.1 初识数组 4.1.1 什么是数组 数组是一个可以存储一组或者一系列数值的变量.在PHP中,数组中的元素分两部分,分别为键(Key)和值(Value).其中,“键”为元素的识别名称,也被称为数组 ...

  4. [ABP教程]第三章 创建、更新和删除图书

    Web应用程序开发教程 - 第三章: 创建,更新和删除图书 关于本教程 在本系列教程中, 你将构建一个名为 Acme.BookStore 的用于管理书籍及其作者列表的基于ABP的应用程序. 它是使用以 ...

  5. [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程

    [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程 本章包含如何在 Android Studio 中书写或生成代码. Android Studio ...

  6. Objective-C 基础教程第三章,面向对象编程基础知

    目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...

  7. javascript进阶教程第三章--匿名和闭包--案例实战

    javascript进阶教程第三章--匿名和闭包--案例实战 一.学习任务 通过几个小练习回顾学过的知识点 二.实例 练习1: 实例描述:打开页面后规定时间内弹出一个新窗口,新窗口指定时间后自动关闭. ...

  8. PHP-----PHP程序设计基础教程----第二章PHP基本语法

    博文结构: 2.1 PHP语法风格 2.1.1 PHP标记 PHP有四种风格的标记,具体如表2-1所示: 表2-1 PHP开始和结束标记 标记类型 开始标记 结束标记 示例 说明 标准标记 <? ...

  9. 脚本语言丨Batch入门教程第三章:逻辑判断

    通过学习Batch入门教程的前两章内容,我们已经大致掌握了基本概念和认识变量的相关内容,今天我们要跟大家继续分享第三章内容:Batch入门教程之逻辑判断.  前期回顾  ◀Batch入门教程丨部署与H ...

随机推荐

  1. 微信小程序-03-小程序开发框架

    微信小程序-03-小程序开发框架 官方文档: https://developers.weixin.qq.com/miniprogram/dev/framework/MINA.html 小程序开发框架 ...

  2. VUE知识day3_vue-cli脚手架安装和webpack模板项目生成

    ue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目. GitHub地址是:https://github.com/vuejs/vue-cli 一.安 ...

  3. 连接到 Azure 上的 SQL Server 虚拟机(经典部署)

    概述 本主题介绍如何连接到运行于 Azure 虚拟机的 SQL Server 实例. 它介绍了一些常规连接方案,并提供了在 Azure VM 中配置 SQL Server 连接的详细步骤. Impor ...

  4. [翻译] KGModal

    KGModal KGModal is an easy drop in control that allows you to display any view in a modal popup. The ...

  5. ubuntu13.04更新源

    最近163的源出问题了,又要换一次源. 报错如下: 查更新源的命令查了好多次,这次还是记下来吧,估计以后还会用到很多次. 常规来说,是要先备份的,不过感觉备份也没什么用,所以就直接跳过吧.. 1  打 ...

  6. MYSQL数据库、用户、表等基础构建

    MYSQL数据库.用户.表等基础构建: 1.->:创建数据库: 1.1. create schema [数据库名称] default character set utf8 collate utf ...

  7. January 11 2017 Week 2nd Wednesday

    One always has time enough, if one will apply it well. 如果你能好好地利用,你总有足够的时间. If you always feel that y ...

  8. Linux命令--用户管理

    useradd命令 Linux useradd命令用于建立用户帐号. useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号.使用useradd指 ...

  9. 链表回文判断(基于链表反转)—Java实现

    学习数据结构的时候遇到一个经典的回文链表问题 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构. 如果有链表反转的基础,实现链表回文判断就简单的多,如 ...

  10. .Net Intelligencia.UrlRewriter 重定向参数中文支持配置方法

    在使用.Net 官方 Url重定向组件时,发现若原地址包含中文,如:http://localhost/首页.html 重定向为:http://localhost/index.aspx?id=首页  时 ...