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. JS Error 内置异常类型 处理异常 Throw语句

    Exceptional Exception Handling in JavaScript       MDN资料 Anything that can go wrong, will go wrong. ...

  2. java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain value for

    使用mybatis做一个简单的查询的时候,报了这个问题.代码如下: <mapper namespace="cn.gaiay.business.zm.live.living.dao.Li ...

  3. Java基础之StringBuffer和StringBuilder的区别

    StringBuffer是一个字符串的缓存类,属于一个容器,对于容器,我们可以进行增删改查. StringBuffer的容器长度是可变的,并且里面可以存放多种的数据类型.它跟其他容器,比如数组,是很不 ...

  4. MyBatis基本配置和实践(五)

    第一步:创建一个Maven工程 第二步:编辑Maven工程的pom.xml,引入mybatis-generator-maven-plugin <?xml version="1.0&qu ...

  5. SQL 常用语法

    一.SQL分类 DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRA ...

  6. 【SQL server 2012】复制数据库到另一台机器上

    当需要将一台机器(源机器)上的一个数据库完全复制到另一台机器(目标机器)上时,可以选择先在源机器上备份该数据库,然后在目标机器上还原该备份的方法. 下面详细描述具体步骤: 1. 打开SQL serve ...

  7. POP3、SMTP端口(SSL、TSL)

    POP3服务器地址: 110           995 支持SSLSMTP服务器地址: 25            465 或者 587 支持SSL(TSL) 465端口是SSL/TLS通讯协议的 ...

  8. linux下的线程学习(二)

    #include <iostream> #include <pthread.h> void cleanup(void *arg) { printf("cleanup: ...

  9. Mac sshw 使用

    sshw ssh client wrapper for automatic login. install use go get go get -u github.com/yinheli/sshw/cm ...

  10. 安装TA-Lib时报错:ubuntu****, Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='

    使用pip install TA-Lib 时报错: ERROR: Complete output from command /usr/bin/python3 -u -c 'import setupto ...