攒了一天才写,拖延症害死人==
php中允许先写调用函数,下面再写函数的定义(同Java) 形参 实参什么的也同C 但是函数名不区分大小写!!!
先介绍一个实用的,把用php写的字符串(本文中用的是一个表格,本质不也是字符串嘛)转存成html文档的函数:file_put_contents(),第一个参数写html文件名,第二个是个字符串
<meta charset="UTF-8">//这句话在PHP外面写!!!
<?php
error_reporting(0);
echo table("用户表",10, 10, 2, 'red', 1, 800, 'left'); //实参 (实际的参数)
file_put_contents("demo.html", table("成绩表", 50, 5, 3, 'green', 10, 400, 'right'));
//声明函数时,提供的参数, 形参(形式上的参数)
function table($tablename, $rows, $cols, $num, $color, $border, $width, $align){
$str .= '<table border="'.$border.'" width="'.$width.'" align="'.$align.'">';
$str .= '<caption><h1>'.$tablename.'</h1></caption>';
for($i=0; $i<$rows; $i++) {//一定记得是$i 不是i!
$bg = ($i%$num==0) ? $color : "";
$str.= '<tr bgcolor="'.$bg.'">';
for($j=0; $j < $cols; $j++ ) {
$str .= '<td>'.($i*10+$j).'</td>';
}
$str .= '</tr>';
}
$str .= '</table>';
return $str;
echo "#################";//证实return之后的不执行……废话
}
分析一下代码都啥意思吧
函数参数果断忽略掉,没啥不会的,记得之前说过双引号有解析字符串的功能吧,所以所有被双引号(都是函数参数,变量)都被解析成对应的值啦
为啥成绩表:
长得和用户表不一样……参数不一样啊
再介绍一个function_exists()判断函数是否存在。“"里面放函数名 没括号
再有就是:在PHP中,只有函数内部的是局部变量!!!若想在函数中不用同名的局部变量,用全局的 前面加global!
而$_POST() $_GET() 本来就是全局的,不用加
例子:
$_POST['a']=100;
$_GET['b']=300;
function demo() {
echo $_POST['a'];
}
demo();
静态变量 没啥好说的:
<?php
/*
* 静态变量
*
*
* 1. 在函数中声明的静态变量, 只在第一次调用时声明.
* 2. 第二次以后, 一看是静态变量, 就先到静态区中,看一下有没有这个变量, 如果有就使用, 而不去再声明
* 3. 静态变量,在同一个函数多次调用中 共享
*
*
*/
static $c=99;
function demo() {
static $a = 0;
$a++;
echo $a."<br>";
}
function test() {
static $a = 0;
$a++;
}
echo $c;
demo();
demo();
test();
test();
test();
test();
demo();
demo();
demo();
伪类型参数的函数:
伪类型参数的函数格式说明:
mixed funName(mixed $a, number $b, callback $c)
PHP是弱类型语言,不仅在声明变量时不需要指定类型,当然在声明函数时也不需要指定类型,所以在PHP中函数的每个参数,都可以为其传递任意类型的值。
三种伪类型: mixed、number 和 callback。
bool empty(mixed $var) //检查一个变量是否为空
bool usort(array &$array,callback $cmp_function)
//使用用户自定义的比较函数对数组中的值进行排序
number abs(mixed $number) //绝对值
引用参数
<?php
/*
* $a = 10;
*
* $b = &$a;
*
* $a = 400;
* $b = 800;
*
* 1. 只有在内存中的变量, 才有地址
* 2. 有引用关系的两个变量, 一个变, 另一个就变, 相当于两个是一个
*
*
* 如果在函数说明中, 有&出现, 说明这个参数是一个引用参数, 你调用时传参数时, 就必须传一个变量
*
*/
$a= 20;
function demo(&$a) {
$a = 100;
}
echo $a."<br>";
demo($a);
echo $a."<br>";
默认参数:顺序很关键 ;省略同c++ ;系统中的省略用【】表示了
<?php
/*
* 默认参数
*
* demo(string $name, int $age, [string $sex, [$string $email]]);
*
*
* */
function demo($name, $age, $sex ="three", $email="four") {
echo "{$name}--{$age}---{$sex}---{$email} <br>";
}
demo("妹子", 20);
demo("妹子", 20, "女");
demo("妹子", 20, "女", 'mz@lampbrother.net');
可变参数:接收数组用:$arr=func_get_args(); 好处是不用考虑参数对应
<?php
/*
* 可变参数
*
* number demo([number $...])
*
*/
function demo() {
$sum = 0;
for($i=0; $i<func_num_args(); $i++){
$sum +=func_get_arg($i);
}
return $sum;
}
echo demo(1,2,3,4,5,6,7,8,9,0);
变量函数:很重要!
<?php
/*
* 如果将一个函数名称(字符串), 给一个变量(字符串), 然后在这个变量后面加上括号, 就会调用这个变量值对应函数
*
*
*/
function add($a, $b) {
return $a + $b;
}
function chen($a, $b) {
return $a * $b;
}
function chu($a, $b) {
if($b!=0)
return $a/$b;
else
return false;
}
$var = "add";
$var = "chen";
$var = "chu";
echo $var(10, 20);
chu(10, 20);