第七章 自定义函数

使用自定义函数的目的:避免大量重复代码的出现。

7.1.标准函数

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

如:

  1. <?php
  2.  
  3. echo md5('123456');
  4.  
  5. echo '<br/>';
  6.  
  7. echo sha1('123456');
  8.  
  9. echo '<br/>';
  10.  
  11. echo pi();
  12.  
  13. ?>

output

  1. e10adc3949ba59abbe56e057f20f883e
  2. 7c4a8d09ca3762af61e59520943dc26494f8941b
  3. 3.14159265359

7.2.自定义函数

7.2.1函数命名基本原则:

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

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

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

7.2.2基本使用:用function进行声明

  1. <?php
  2.  
  3. //创建函数 
  4.  
  5. function funcCountArea($radius)
  6.  
  7. {
  8.  
  9. return $radius*$radius*pi();
  10.  
  11. }
  12.  
  13.  
  14.  
  15. //使用函数
  16.  
  17. $area = funcCountArea(20);
  18.  
  19. echo $area;
  20.  
  21. echo '<br/>';
  22.  
  23.  
  24.  
  25. $area2 = funcCountArea(30);
  26.  
  27. echo $area2;
  28.  
  29. ?>

output

  1. 1256.63706144
  2. 2827.43338823

7.2.3按值传参

  1. <?php
  2.  
  3. $a = 5;
  4.  
  5. function funcChange($a)
  6.  
  7. {
  8.  
  9. $a = 2 * $a;
  10.  
  11. }
  12.  
  13. funcChange ($a);
  14.  
  15. echo $a;
  16.  
  17. ?>

output

  1. 5

7.2.4按引用传参

  1. <?php
  2.  
  3. $a = 5;
  4.  
  5. function funcChange(&$a)
  6.  
  7. {
  8.  
  9. $a = 2 * $a;
  10.  
  11. }
  12.  
  13. funcChange ($a);
  14.  
  15. echo $a;
  16.  
  17. ?>

output

  1. 10

7.2.5返回多个值的函数调用

  1. <?php
  2.  
  3. function funcUserInfo($username,$password)
  4.  
  5. {
  6.  
  7. $userInfo = array($username,$password);
  8.  
  9. return $userInfo;
  10.  
  11. }
  12.  
  13.  
  14.  
  15. $arr = funcUserInfo('anllin','123456');
  16.  
  17.  
  18.  
  19. print_r($arr);
  20.  
  21. ?>

output

  1. Array ( [0] => anllin [1] => 123456 )

7.2.6另一种返回多个值的函数调用(实用:推荐)

  1. <?php
  2.  
  3. function funcUserInfo($username, $password)
  4.  
  5. {
  6.  
  7. $userInfo [] = $username;
  8.  
  9. $userInfo [] = $password;
  10.  
  11. return $userInfo;
  12.  
  13. }
  14.  
  15.  
  16.  
  17. $arr[] = funcUserInfo ( 'Bob', '512655' );
  18.  
  19. $arr[] = funcUserInfo ( 'John', '458736' );
  20.  
  21. $arr[] = funcUserInfo ( 'Mark', '925472' );
  22.  
  23. print_r ( $arr );
  24.  
  25. ?>

output

  1. Array ( [0] => Array ( [0] => Bob [1] => 512655 ) [1] => Array ( [0] => John [1] => 458736 ) [2] => Array ( [0] => Mark [1] => 925472 ) )

注意:函数调用是不区分大小写的,但是变量名是区分大小写的。

7.2.7理解作用域:

局部变量:

在函数内部声明的变量。

全局变量:

在函数外部声明的变量。

7.2.8局部变量转换成全局变量

  1. <?php
  2.  
  3. $a = 5;
  4.  
  5. function funcChangeValue()
  6.  
  7. {
  8.  
  9. global $a;
  10.  
  11. $a = 10;
  12.  
  13. }
  14.  
  15.  
  16.  
  17. funcChangeValue();
  18.  
  19.  
  20.  
  21. echo $a;
  22.  
  23. ?>

output

  1. 10

7.2.9超级全局变量$GLOBALR的使用

  1. <?php
  2.  
  3. $GLOBALS['a'] = 5;
  4.  
  5. function funcChangeValue()
  6.  
  7. {
  8.  
  9. $GLOBALS['a'] = 10;
  10.  
  11. }
  12.  
  13.  
  14.  
  15. funcChangeValue();
  16.  
  17.  
  18.  
  19. echo $GLOBALS['a'];
  20.  
  21. ?>

Output

  1. 10

7.3.文件包含

7.3.1 Include的使用,可以包含相同的文件多次

  1. <?php
  2.  
  3. include 'demo1.php';
  4.  
  5. include 'demo1.php';
  6.  
  7. include 'demo1.php';
  8.  
  9. ?>

output

  1. e10adc3949ba59abbe56e057f20f883e
  2. 7c4a8d09ca3762af61e59520943dc26494f8941b
  3. 3.14159265359
  4.  
  5. e10adc3949ba59abbe56e057f20f883e
  6. 7c4a8d09ca3762af61e59520943dc26494f8941b
  7. 3.14159265359
  8.  
  9. e10adc3949ba59abbe56e057f20f883e
  10. 7c4a8d09ca3762af61e59520943dc26494f8941b
  11. 3.14159265359

7.3.2 include_once使用上和include没什么区别,但是调用多次只会包含相同的文件一次

  1. <?php
  2.  
  3. include_once 'demo1.php';
  4.  
  5. include_once 'demo1.php';
  6.  
  7. include_once 'demo1.php';
  8.  
  9. ?>

output

  1. e10adc3949ba59abbe56e057f20f883e
  2. 7c4a8d09ca3762af61e59520943dc26494f8941b
  3. 3.14159265359s

7.3.3 require() 语句包含并运行指定文件。

  1. <?php
  2.  
  3. require 'demo1.php';
  4.  
  5. require 'demo1.php';
  6.  
  7. require 'demo1.php';
  8.  
  9. ?>

output

  1. e10adc3949ba59abbe56e057f20f883e
  2. 7c4a8d09ca3762af61e59520943dc26494f8941b
  3. 3.14159265359
  4.  
  5. e10adc3949ba59abbe56e057f20f883e
  6. 7c4a8d09ca3762af61e59520943dc26494f8941b
  7. 3.14159265359
  8.  
  9. e10adc3949ba59abbe56e057f20f883e
  10. 7c4a8d09ca3762af61e59520943dc26494f8941b
  11. 3.14159265359

7.3.4 require_once() 语句在脚本执行期间包含并运行指定文件.但是不重复包含相同的文件。

  1. <?php
  2.  
  3. require_once 'demo1.php';
  4.  
  5. require_once 'demo1.php';
  6.  
  7. require_once 'demo1.php';
  8.  
  9. ?>

output

  1. e10adc3949ba59abbe56e057f20f883e
  2. 7c4a8d09ca3762af61e59520943dc26494f8941b
  3. 3.14159265359s

7.3.5 include与require的区别

Include后面如果还有其他代码,当调用include出错时,后面的代码还会继续执行,但是require则不会。

Include在调用一个不存在的文件时,会给出警告,但是会继续执行后面的代码。

  1. <?php
  2.  
  3. include 'demo111.php';
  4.  
  5.  
  6.  
  7. echo('this is demo13.php');
  8.  
  9. ?>

output

  1. Warning: include(demo111.php) [function.include]: failed to open stream: No such file or directory in D:\AppServ\www\Basic7\demo13.php on line 2
  2.  
  3. Warning: include() [function.include]: Failed opening 'demo111.php' for inclusion (include_path='.;C:\php5\pear') in D:\AppServ\www\Basic7\demo13.php on line 2
  4. this is demo13.php

Require在调用一个不存在的文件时,会给出一个错误,并中止代码的执行。

  1. <?php
  2.  
  3. require 'demo111.php';
  4.  
  5.  
  6.  
  7. echo('this is demo14.php');
  8.  
  9. ?>

Output

  1.  
  2. Warning: require(demo111.php) [function.require]: failed to open stream: No such file or directory in D:\AppServ\www\Basic7\demo14.php on line 2
  3.  
  4. Fatal error: require() [function.require]: Failed opening required 'demo111.php' (include_path='.;C:\php5\pear') in D:\AppServ\www\Basic7\demo14.php on line 2

7.4.魔法常量

名称描述
FILE当前文件名
LINE当前行号
FUNCTION当前函数名
CLASS当前类名
METHOD当前方法名

所谓的魔法常量,并不是真的常量,而是根据场合去获取固定值的变量

  1. <?php
  2.  
  3. echo __FILE__;
  4.  
  5. echo '<br>';
  6.  
  7.  
  8.  
  9. echo __LINE__;
  10.  
  11. echo '<br>';
  12.  
  13.  
  14.  
  15. function funcTest()
  16.  
  17. {
  18.  
  19. echo __FUNCTION__;
  20.  
  21. }
  22.  
  23. funcTest();
  24.  
  25. ?>

output

  1. D:\AppServ\www\Basic7\demo15.php
  2. 5
  3. funcTest