第7章 自定义函数

学习要点:

1.标准函数

2.自定义函数

3.文件包含

4.魔法常量

一般来讲,冗余的代码都是不好的。一而再,再而三地重写代码不仅浪费时间,从布局结构角度看也显得粗制滥造。与所有优秀的编程语言一样,PHP采用了很多方法来缓解冗余代码的问题,其中最常见而且最容易实现的方法就是使用函数(function)。

一.标准函数

标准的PHP发行包中有1000多个标准函数,这些标准函数都是系统内置的,不需要用户自己创建而可以直接使用。

<?

echo md5('123456');   //MD5函数对字符串进行加密处理

?>

二.自定义函数

PHP内置函数允许和文件进行交互、使用数据库、创建图形,还可以连接其他的服务器。但是,在实际工作中,有许多时候所需要的东西是语言的创建者无法预见到的。

声明一个函数可以让我们想内置函数那样使用自己的代码。只要简单地调用这个函数并提供给它必须的参数。这就意味着,在整个脚本中,都可以调用和多次重复使用相同的函数。

创建函数

<?

function functionName() {

echo '这是一个无参无返回自定义函数';

}

?>

调用函数

<?

functionName();

?>

函数命名

1.函数名不能和已有的函数名重名。

2.函数名只能包含字母、数字和下划线。

3.函数名不能以数字开头。

包含参数无返回的函数调用

<?

function functionArea($radius) {

$area = $radius * $radius * pi();

echo $area;

}

functionArea(10);

?>

包含参数有返回的函数调用:使用return()语句可以向函数调用者返回任意确定值,将程序控制权返回到调用者的作用域。

<?

function functionArea($radius) {

return $radius * $radius * pi();

}

echo functionArea(10);

?>

包含默认参数的函数调用:可以为输入参数指定默认值,在没有提供其他值的情况下,就会把这个默认值自动赋给该参数。

<?

function functionArea($radius=10) {

return $radius * $radius * pi();

}

echo functionArea();

?>

返回多个值的函数调用:可以通过返回一个数组然后使用list()函数构造即可。

<?

function functionInfo($name,$age,$job) {

$userInfo = array($name,$age,$job);  //可以用追加的方式比较常用

return $userInfo;

}

list($name,$age,$job) = functionInfo('吴祁',19,'学生');

echo $name.'今年'.$age.'岁了,目前还是个'.$job;

?>

包含引用传参的函数调用:引用传递可以在函数内对参数的修改在函数范围外也能反应。

<?

$prices = 50;

$tax = 0.5;

function functionPrices(&$prices,$tax) {

$prices = $prices + ($prices * $tax);

$tax = $tax * 2;

}

functionPrices($prices,$tax);

echo $prices;

echo '<br />';

echo $tax;

?>

请注意,函数调用将不区分大小写,所以调用functionname()、FunctionName()或FUNCTIOINNAME()都是有效的,而且都将返回相同的结果。为了方便,这里都用小写。

注意到函数名称和变量名称是不同的,这一点很重要。变量名是区分大小写的,所以$Name和$name是两个不同的变量,但Name()和name()则是同一个函数。

理解作用域

变量的作用域可以控制变量在哪里是可见并且可用的。不同的编程语言有不同的变量作用域规则。PHP具有相当简单的规则:

在函数内部声明的变量作用与是从声明它们的那条语句开始到函数末尾。这叫做函数作用域。这些变量成为局部变量。

在函数外部声明的变量作用域是从声明它们的那条语句开始到文件末尾,而不是函数内部。这叫做全局作用域。这些变量成为全局变量。

特殊的超级全局变量在函数内外部都是可见的。

使用require()和include()并不影响作用域。如果这两个语句用于函数内部,函数作用域适用。如果它不在函数内部,全局作用域适用。

关键字“global”可以用来手动指定一个在函数中定义或使用的变量具有全局作用域。

通过调用unset($variable_name)可以手动删除变量。如果变量被删除,它就不在参数所指定的作用域中了。

全局变量定义global

<?

$a = 5;

function fna() {

global $a;

$a = 20;

}

fna();

echo $a;

?>

可以通过使用超级全局变量$GLOBAL,可以访问或改变全局作用域中的任何变量。

<?

$GLOBALS['a'] = 5;

function fna() {

$GLOBALS['a'] = 20;

}

fna();

echo $GLOBALS['a'];

?>

创建自己的函数库

通常将函数集文件存放在library文件夹里,然后通过文件调用即可。文件名约定促成可以取名为tool.library.php,tool可以根据情况来设定,后面两个照抄!

三.文件包含

为了确保重用性和模块性,最普遍的方式是把功能组建隔离为单独的文件,然后在需要时重新组装。PHP提供了四种在应用程序中包含文件的语句。

include()语句将在其被调用的位置处判断并包含一个文件。包含一个文件与在该语句所在位置复制该文件的数据具有相同的结果。

<?

include 'include.php';

?>

include_once()函数的作用与include()相同,不过它会首先验证是否已经包含了该文件。如果包含了该文件,则不再执行include_once()。

<?

include_once 'include.php';

?>

require()在很大程度与include()相同,都是将一个模板文件包含到require()调用所在的位置。

<?

require('require.php');

?>

require_once()函数的作用与require()相同,不过require_once()函数确保文件只包含一次。在遇到require_once()后,后面再试图包含相同的文件时都将被忽略。

<?

require_once('require.php');

?>

require()语句和include()语句几乎是等价的。二者的差异在于,当这两个语句调用失败后,require()将给出一个致命错误,而include()只是给出一个警告

四.魔法常量

PHP实现了一些所谓的魔法常量,他们并不真的是常量,因为这些魔法常量会根据使用的场合改变值。

名称

描述

__FILE__

当前文件名

__LINE__

当前行号

__FUNCTION__

当前函数名

__CLASS__

当前类名

__METHOD__

当前方法名

PHP - 自定义函数的更多相关文章

  1. Mysql - 存储过程/自定义函数

    在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...

  2. Entity Framework 6 Recipes 2nd Edition(10-5)译 -> 在存储模型中使用自定义函数

    10-5. 在存储模型中使用自定义函数 问题 想在模型中使用自定义函数,而不是存储过程. 解决方案 假设我们数据库里有成员(members)和他们已经发送的信息(messages) 关系数据表,如Fi ...

  3. mysql 常用自定义函数解析

    -- /* -- * 用于获取一记录数据,根据传入的分隔字符delim,索引位置pos,返回相对应的value -- * SELECT Json_getKeyValue({"A": ...

  4. mysql 自定义函数

    原文:http://www.cnblogs.com/zhangminghui/p/4113160.html 引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利 ...

  5. Sql Server系列:自定义函数

    用户自定义函数可以像系统函数一样在查询或存储过程中调用,可以接受参数.执行操作并将操作结果以值的形式返回.返回值可以是单个标量或结果集. 1. 标量函数 标量函数返回一个确定类型的标量值,对于多语句的 ...

  6. asp.net MVC helper 和自定义函数@functions小结

    asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...

  7. PHP函数之自定义函数

    像数学中的函数一样,y=f(x)是函数基本的表达形式,x可看做是参数,y可看做是返回值,即函数定义就是一个被命名的.独立的代码段,它执行特定的任务,并可能给调用它的程序返回一个值. 自定义函数 函数的 ...

  8. C语言-自定义函数

    C语言自定义函数 --1-- 自定义函数定义 1.1 无参无返回值函数 1.2 无参有返回值函数 1.3 有参无返回值函数 1.4 有参有返回值函数 --2-- 函数的参数 2.1 形式参数介绍和使用 ...

  9. MySQL自定义函数

    用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同. 自定义函数两个必要条件: 参数:可以有另个或多个 返回值:只能有一个 创建自定 ...

  10. Hive自定义函数的学习笔记(1)

    前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...

随机推荐

  1. [Python]小笔记-queue

    queue的作用: 队列最大的作用就是先进先出(First in First Out).队列对于解决最短路的时候特别好用. python 2.7: 要使用队列,那么要加载头文件Queue,也就是imp ...

  2. Linux系统目录(转载)

    /         (这就是著名的根)├── bin         (你在终端运行的大多数程序,比如cp.mv...)├── boot         (内核放在这里,这个目录也经常被作为某个独立分 ...

  3. spring 框架整合 笔记4

    struts hibernate spring 先贴出框架整合需要的maven <project xmlns="http://maven.apache.org/POM/4.0.0&qu ...

  4. MFC基础,MFC自绘控件学习总结.---转

    前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或 ...

  5. Js中的多条件排序,多列排序

    參见github: https://github.com/Teun/thenBy.js

  6. android一个弹出菜单的动画(二)

    假设做一个弹出的控件,我们能够进行加入view: 写class SatelliteMenu extends FrameLayout private void init(Context context, ...

  7. ajax对服务器路径请求

    $.post('/aaaa/bbbb/cccc', { "paraName": value}, function (data) {                        S ...

  8. Linux内核态抢占机制分析(转)

    Linux内核态抢占机制分析  http://blog.sina.com.cn/s/blog_502c8cc401012pxj.html 摘 要]本文首先介绍非抢占式内核(Non-Preemptive ...

  9. 【转】CentOS 6 服务器安全配置指南

    原文连接: CentOS 6 服务器安全配置指南(通用) Linux 是一个开放式系统,可以在网络上找到许多现成的程序和工具,这既方便了用户,也方便了黑客,因为他们也能很容易地找到程序和工具来潜入 L ...

  10. [转]CENTOS 6.5 配置YUM安装NGINX+服务器负载均衡

    原文连接: CENTOS 6.5 配置YUM安装NGINX  http://blog.sina.com.cn/s/blog_69f467b70102uyux.html 参考博文: Centos下安装. ...