标签:必须 ascii http 允许 输入 lod 关系 法规 句柄
系统有常用功能的函数,直接调用;若没有,则根据模块需要自行编写函数。
PHP 的真正力量来自它的函数:它拥有超过 1000 个内建的函数。
function 函数名([参数1,参数2,参数3,……参数n]){ 函数体; [return 返回值]; }
function table() { // 将使用双层for循环输出表格的代码声明为函数,函数名为table echo "<table align=‘center‘ border=‘1‘ width=‘600‘>"; echo "<caption><h1>通过函数输出表格</h1></caption>"; for($out = 0; $out < 10; $out ++) { if ($out % 2 == 0) $bgcolor = "#ffffff"; else $bgcolor = "#dddddd"; echo "<tr bgcolor=" . $bgcolor . ">"; for($in = 0; $in < 10; $in ++) { echo "<td>" . ($out * 10 + $in) . "</td>"; } echo "</tr>"; } echo "</table>"; } // table函数结束花括号
可以在函数定义之前或之后调用函数。
/** * 输出表格函数 * @param unknown $tableName * @param unknown $rows * @param unknown $cols */ function table($tableName, $rows, $cols) { echo "<table align=‘center‘ border=‘1‘ width=‘600‘>"; echo "<caption><h1> $tableName </h1></caption>"; // 在输出表名时使用第一个参数做为表名 for($out = 0; $out < $rows; $out ++) { // 使用第二个参数做为外层循环的次数条件 if ($out % 2 == 0) $bgcolor = "#ffffff"; else $bgcolor = "#dddddd"; echo "<tr bgcolor=" . $bgcolor . ">"; for($in = 0; $in < $cols; $in ++) { // 使用第三个参数做为内层循环的次数条件 echo "<td>" . ($out * $cols + $in) . "</td>"; } echo "</tr>"; } echo "</table>"; } // table函数结束花括号 table ( "第一个3行4列的表", 3, 4 ); // 第一次调用table()函数,传入三个实参。 table ( "第二个2行10列的表", 2, 10 ); // 第二次调用table()函数,传入三个实参。 table ( "第三个5行5列的表", 5, 5 ); // 第三次调用table()函数,传入三个实参。
/** * 定义可以改变表名、行数和列数的函数,同时返回表格信息字符串 * @param unknown $tableName * @param unknown $rows * @param unknown $cols * @return string */ function table($tableName, $rows, $cols) { $str_table = ""; // 声明一个空字符串,将下面的计算结果累加到这个字符串里面 $str_table .= "<table align=‘center‘ border=‘1‘ width=‘600‘>"; // 将些行累加到$str_table字符串中 $str_table .= "<caption><h1> $tableName </h1></caption>"; // 将些行累加到$str_table字符串中 for($out = 0; $out < $rows; $out ++) { if ($out % 2 == 0) $bgcolor = "#ffffff"; else $bgcolor = "#dddddd"; $str_table .= "<tr bgcolor=" . $bgcolor . ">"; // 将些行累加到$str_table字符串中 for($in = 0; $in < $cols; $in ++) { $str_table .= "<td>" . ($out * $cols + $in) . "</td>"; // 将些行累加到$str_table字符串中 } $str_table .= "</tr>"; // 将些行累加到$str_table字符串中 } $str_table .= "</table>"; // 将些行累加到$str_table字符串中 return $str_table; // 返回通过本函数计算后的字符串 } $str = table ( "第一个3行4列的表", 3, 4 ); // 调用table函数并将返回的结果赋给变量$str echo table ( "第二个2行10列的表", 2, 10 ); // 调用table函数并直接将返回结果输出 echo $str; // 将获取到的$str字符串输出
需求说明:
1、 四则运算计算器
2、 操作数和操作符通过html表单输入
3、 三个参数函数,分别是操作数1,操作数2,操作符,返回计算结果
1、结构化让程序更容易编写,便于团队协作。
2、结构化更容易调试,故障可以实现单元定位,即定位到函数
变量的范围,即变量的生效范围。
function demo($one) { $two = 100; echo "在函数内部执行:$one+$two =" . ($one + $two) . "<br>"; } demo ( 200 ); echo "在函数外部执行:$one+$two =" . ($one + $two) . "<br>";
$one = 100; $two = 200; function demo() { echo "在函数内部执行:$one+$two =" . ($one + $two) . "<br>"; } demo ( ); echo "在函数外部执行:$one+$two =" . ($one + $two) . "<br>";
$one = 100; $two = 200; function demo() { global $one,$two; echo "在函数内部执行:$one+$two =" . ($one + $two) . "<br>"; } demo ( ); echo "在函数外部执行:$one+$two =" . ($one + $two) . "<br>";
one = 100; $two = 200; function demo() { $GLOBALS[‘two’]= $GLOBALS[‘one’]+ $GLOBALS[‘two’]; echo "在函数内部执行:$one+$two =" . ($one + $two) . "<br>"; } demo ( ); echo "在函数外部执行:$one+$two =" . ($one + $two) . "<br>";
局部变量从存储方式上可以分为动态存储和静态存储。默认动态存储。如果要静态存储,则需要加上关键字static。静态局部变量在函数被调用执行任务之后不会被释放。
function test(){ static $a=0; echo $a; $a++; } test(); test(); test();
及应用各种形式的PHP函数
/** * 定义一个求两个整数的平方和函数 * @param int $i 第一个整数参数,作为一个运算数 * @param int $j 第二个整数参数,作为另一个运算数 * @return int 返回一个整数,计算后的结果 */ function test($i,$j){ $sum=0;//声明一个变量保持计算后的结果 $sum=$i*$i+$j*$j;//计算 return $sum;//返回值,返回计算后的结果 } echo test(7,9);
String example(string name,int age,double height) //常规参数的函数格式说明
mixed func (mixed $args) // 参数列表和返回值使用mixed描述的参数 number func (number $args) // 参数列表和返回值使用number描述的参数
void func (array &arg) // 在参数列表使用&描述的参数
mixed func (string name[,string value[,int expire]]) //在参数列表使用[]描述的参数
mixed func (string arg1[,string …]) // 参数列表中出现…描述参数
function more_args() { $args = func_get_args (); // 获取参数数组 for($i = 0; $i < count ( $args ); $i ++) { echo "第".($i+1)."个参数是:".$args[$i]."<br>"; } } more_args("one","two","three",1,2,3);
function more_args() { $args = func_get_args (); // 获取参数数组 for($i = 0; $i < count ( $args ); $i ++) { //echo "第".($i+1)."个参数是:".$args[$i]."<br>"; echo "第".($i+1)."个参数是:".func_get_arg($i)."<br>"; } } more_args("one","two","three",1,2,3);
mixed func (callback arg) // 参数列表中使用伪类型callback描述参数
定义:func函数的参数也是函数。
作用:函数功能的扩展。
定义:变量函数也称为可变函数。如果一个变量名后跟上“()“,则PHP将寻找与变量的值相同的函数名,并执行他。
示例代码:
/** * 计算两个数的和 * @param number $a 第一个运算数 * @param number $b 第二个运算数 * @return number 计算结果 */ function one($a,$b){ return $a+$b; } /** * 计算两个数的平方和 * @param number $a 第一个运算数 * @param number $b 第二个运算数 * @return number 计算结果 */ function two($a,$b){ return $a*$a+$b*$b; } /** * 计算两个数的立方和 * @param number $a 第一个运算数 * @param number $b 第二个运算数 * @return number 计算结果 */ function three($a,$b){ return $a*$a*$a+$b*$b*$b; } $result="one"; //$result="two"; //$result="three"; echo "计算结果是:".$result(2,3);//变量是哪个函数名的值,就调用那个函数
工作原理:定义回调函数时,声明参数为普通变量,在函数内部应用这个变量时,加上“()“就可以调用到和这个参数值同名的函数。所以传递参数的时候,这个参数字符串一定要是被调用函数的名称。
示例代码:
/** * 声明回调函数filter,在0-100的整数中通过自定义条件过滤不要的数字 * @param callback $fun 需要传递一个函数名称字符串作为参数 */ function filter($fun){ for($i=0;$i<=100;$i++){ //参数变量加上“()”,则会调用和变量$fun值同名的函数 if($fun($i)){ continue; } echo $i.‘ ‘; } } /** * 声明函数one,如果参数是3的倍数就返回true,否则返回false * @param int $num 整数参数 * @return boolean */ function one($num){ return $num%3==0; } /** * 声明函数two,如果参数是回文数(翻转后还是自己)返回true,否则返回false * @param int $num 整数参数 * @return boolean */ function two($num){ return $num==strrev($num); } echo ‘打印出100以内非3的倍数:‘; filter("one"); echo ‘<br>------------------------<br>‘; echo ‘打印出100以内的非回文数:‘; filter("two");
使用变量函数声明实现回调函数实际应用少,PHP系统提供了call_user_func_array()函数实现回调。call_user_func_array()函数本身也是一个回调函数,其语法格式如下:
mixed call_user_func_array( callback function , array param_arr)
参数说明:
callback function:函数名字符串
array param_arr:被调用函数的参数列表,数组类型。
示例代码(直接调用):
//call_user_func_array()自定义回调函数 function fun($msg1, $msg2) { echo ‘$msg1 = ‘ . $msg1; echo ‘<br>‘; echo ‘$msg2 = ‘ . $msg2; } call_user_func_array("fun", array("LAMP","SAN科技"));
示例代码(在函数中应用):
/** * 使用自定义函数过滤掉不满足条件的数字 * @param callback $fun 过滤条件函数 */ function filter($fun){ for($i=1;$i<=100;$i++){ if(call_user_func_array($fun, array($i))){ continue; } echo $i." "; } }
类的静态函数:
class Demo { static function fun($msg1, $msg2) { echo ‘$msg1 = ‘ . $msg1; echo ‘<br>‘; echo ‘$msg2 = ‘ . $msg2; } }
类的普通方法:
class Demo { function fun($msg1, $msg2) { echo ‘$msg1 = ‘ . $msg1; echo ‘<br>‘; echo ‘$msg2 = ‘ . $msg2; } }
call_user_func_array()如何调用类的静态函数和类的普通方法?
类的静态方法的调用:
call_user_func_array(array("Demo","fun"), array("LAMP","核心科技"));
类的普通方法的调用:
call_user_func_array(array(new test(),"fun"), array("LAMP","核心科技"));
mixed call_user_func_array(callback function,array param_arr);
第一个参数在不同情况下调用的差异:
Callback(“函数名称字符串”) #回调全局函数
Callback(array(“类名称字符串”,“类中静态方法名称字符串”)) #回调类中的静态方法成员
Callback(array(对象引用,“对象中方法名称字符串”)) #回调对象中的方法成员
其中第二个参数各种情况下都是一致的:参数数组。
/** * 递归函数测试 * @param int $n 整数参数 */ function recursiveDemo($n) { echo $n . ‘  ‘; if ($n > 0) { recursiveDemo ( $n - 1 ); }else{ echo ‘<-->‘; } echo $n.‘  ‘; } recursiveDemo(10);
输出结果:
函数库属于一种设计模式。
为了更好的组织代码,使得自定义函数可以在同一个项目的多个文件中使用,通常将多个自定义的函数组织到同一个文件或多个文件中,这些收集自定义函数的PHP文件就是PHP函数库。
如何引用函数库?
引用语句 |
区别 |
require() 或者 require ‘函数库php’; |
函数库内容替换require关键字。多次调用函数库,效率高。 |
Require_once() 或者 require_once ‘函数库php’; |
行为同require();如果该文件在代码中已经被包括,则不会再次加载。 |
include() 或者 include ‘函数库php’; |
每次执行函数库时候,都要加载和评估。适合于每次代码执行通过条件判断读取不同函数库。 |
include _once() 或者 include_once ‘函数库php’; |
行为同include();如果该文件在代码中已经被包括,则不会再次加载。 |
/** * 定义一个匿名函数(闭包函数) * @var string 需要一个字符串参数 */ $func=function ($param){ echo $param; };//注意:匿名函数定义的“}”之后必须加“;”号。 $func("hello php function!");
/** * 声明函数callback * @param callback $callback 需要传递一个匿名函数作为参数 */ function callback($callback){ $callback(); } callback(function (){ echo "匿名函数作为回调函数参数的值测试!"; });
/** * 声明函数callback * @param callback $callback 需要传递一个匿名函数作为参数 */ function callback($callback){ $callback(); }
$var="字符串变量";
callback(function () use($var){//引用传递use(&变量名)
//echo $var;//没有使用use无法访问变量
echo $var;//使用use后可以正常反问
});
系统函数 |
说明 |
string chr(int ascii) |
返回相对应于 ascii 所指定的单个字符; $str=chr(81)返回Q |
float ceil(float value) |
Value值上舍入 |
int rand ([ int $min ], int $max ) |
返回$min到$max之间的随机数 |
array array_combine(array keys,array values) |
返回一个 array,用来自 keys 数组的值作为键名,来自 values 数组的值作为相应的值。 |
Int strnatcmp(string str1,string strw) |
使用”自然”算法来比较两个字符串(区分大小写)。在自然算法中,数字 2 小于数字 10。在计算机排序中,10 小于 2,这是因为 10 中的第一个数字小于 2。 |
String implode(string glue,array pieces) |
把数组元素组合为字符串。Glue,转换后的连接符号,pieces待转换数组。 |
String readdir(resource dir_handle) |
返回目录资源句柄的文件名 |
bool sort (array &$array [, int $sort_flags ] ) |
对数组进行排序。当函数结束时数组单元将被从最低到最高重新安排。 |
bool print_r (mixed $expression [, bool $return ] ) |
print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 |
void var_dump ( mixed expression [, mixed expression [, ...]] ) |
判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型。 |
int empty(mixed var) |
用来测试变量是否已经配置。若变量已存在、非空字符串或者非零,则返回 false 值;反之返回 true。 |
void unset ( mixed var [, mixed var [, ...]] ) |
unset() 销毁指定的变量 |
use() |
闭包函数连接外部变量 |
标签:必须 ascii http 允许 输入 lod 关系 法规 句柄
原文地址:https://www.cnblogs.com/rask/p/9016085.html