第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. System.Web Namespce

    System.Web概述: System.Web是.NET中web应用开发的一个基础类库,定义浏览器与服务器之间的所有操作方法,包括请求输入流(HttpRequest).输出流(HttpRespons ...

  2. mysql在linux上的一点操作

    1,查看打开端口. show variables like 'port'; 2, 指定ip,用户名,密码 1 grant all privileges on   *.* to root@"% ...

  3. Publisher/Subscriber 订阅-发布模式

    Publisher/Subscriber 订阅-发布模式 本博后续将陆续整理这些年做的一些预研demo,及一些前沿技术的研究,与大家共研技术,共同进步. 关于发布订阅有很多种实现方式,下面主要介绍WC ...

  4. MAC Eclipse 快捷键

    MAC Eclipse 快捷键大全备忘: Command + O:显示大纲 Command + 1:快速修复 Command + D:删除当前行 Command + Option + ↓:复制当前行到 ...

  5. cocos2dx进阶学习之CCTMXLayer

    继承关系 CCTMXLayer -> CCSpriteBatchNode CCTMXLayer是在瓦片地图中,抽象一个层的类,它继承自CCSpriteBatchNode,也就是说它抽象了一批相同 ...

  6. pragma comment

    pragma指令简介 在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作. 下面介绍了一下该指令的一些常用参数,希望对大家有所帮助! 一. mess ...

  7. 简单的iOS抽屉效果

    #define screenW [UIScreen mainScreen].bounds.size.width #import "ViewController.h" @interf ...

  8. IT忍者神龟之Java动态代理与CGLib代理

    <br>public class UserDAOImpl{ <br><br>    public void save() { <br>        / ...

  9. Android创建启动画面

    每一个Android应用启动之后都会出现一个Splash启动界面,显示产品的LOGO.公司的LOGO或者开发人员信息.假设应用程序启动时间比較长,那么启动界面就是一个非常好的东西,能够让用户耐心等待这 ...

  10. Python类的继承演示样例

    class Pet: __name = "" def __init__(self, name): self.__name = name def bark(self): return ...