第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. Arrays类学习笔记

    Arrays.asList(arr); 该方法可以把数组变成List集合. String[] arr = {"abc","cc"}; List<Strin ...

  2. HTML5 总结-地理定位-6

    HTML5 地理定位 定位用户的位置 HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的. 浏览器支持 Int ...

  3. 安装andriod studio时出现Internal error. Please report to https://code.google.com/p/an

    有两种方法的哈 一,在文件中添加  disable.android.first.run=true (我试了这种就好使了哈) 1)进入刚安装的Android Studio目录下的bin目录.找到idea ...

  4. cocos2d-x游戏开发系列教程-超级玛丽10-怪物与马里奥冲突检测

    在超级玛丽游戏中,马里奥在移动,怪物也在移动,当他们遇见时,需要判断是马里奥身亡还是怪物身亡. 这个判断的代码在怪物类的检测函数实现中. 比如蘑菇怪的冲突检测函数: bool CMMonsterMus ...

  5. 数学之路(3)-机器学习(3)-机器学习算法-SVM[9]

    我们应用SVM的非线性分类功能对手写数字进行识别,我们在这应用poly做为非线性核 svm = mlpy.LibSvm(svm_type='c_svc', kernel_type='poly',gam ...

  6. AlertDialog具体解释

    对话框介绍与演示样例         对话框在程序中不是必备的,可是用好对话框能对我们编写的应用增色不少.採用对话框能够大大添加应用的友好性.比較经常使用的背景是:用户登陆.网络正在下载.下载成功或者 ...

  7. Ceph之数据分布:CRUSH算法与一致性Hash

    转自于:http://www.cnblogs.com/shanno/p/3958298.html?utm_source=tuicool 数据分布是分布式存储系统的一个重要部分,数据分布算法至少要考虑以 ...

  8. 设置outlook自动回复

    当有同事需要出差时,或者不能即时回复邮件时,可用此功能. 下面列出设置步骤: 1.  首先,在桌面新建一个用以保存模板的文件夹,例如:emaii. 2.  新建一封邮件,输入你要自动回复的内容.另存为 ...

  9. Linux DM9000网卡驱动程序完全分析

    Linux DM9000网卡驱动程序完全分析http://blog.csdn.net/ypoflyer/article/details/6209922

  10. [转] Ant 编译 Android 项目为 Apk 实战, 常见问题解决

    补充,自行安装Ant, 配置ant环境变量, 在android 项目 根目录下使用 android update project 可以自动生成 build.xml 和 local.peoperties ...