Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:
function 函数名称(类型限定 参数列表) : 返回值类型
{
// 函数体
return 返回值;
// 没有return 返回null
}
<?php
function myfunc(float $a,int $b):float
{
return $a+$b;
}
echo myfunc(1,2);
命名函数
自动提升,在全局任何地方都可以调用
<?php
// 函数提升
echo myfunc();
echo '<br>';
function myfunc()
{
return 'hello';
}
echo myfunc();
匿名函数
<?php
$myfunc = function ()
{
return 'hello';
};
echo $myfunc();
<?php
// 必选参数
function myfunc(string $name): string
{
// return返回值是文本必选是双括号
return "hello $name";
};
echo myfunc('天蓬老师');
可选参数
<?php
function demo2(string $name = 'php.cn'): string
{
return "Hello $name !";
}
echo demo2(), '<br>';
echo demo2('php中文网'), '<hr>';
$args剩余参数语法,组合成数组
<?php
// ...$args剩余参数语法,组合成数组
function myfunc(...$args)
{
print_r($args);
};
myfunc(1,2,3);
$args的在数据库实际应用
<?php
function connect(...$args)
{
// print_r($args);
return new PDO($args[0], $args[1], $args[2]);
}
// 数据库暂未学习,大家先体会一下
$pdo = connect('mysql:dbname=mysql','root','root');
if ($pdo) echo '<h3>连接成功</h3>';
ob_clean();
php支持“值传递”和“引用传递”
引用传参在参数前使用: &
<?php
// 4. 引用参数
// js函数参数只支持值传递
// php支持“值传递”和“引用传递”
// 默认就是值传递,上面全是
// 引用传参: 在函数内部对参数的任何更新都会实现映射到外部的参数中
$name = '天蓬老师';
// 引用传参在参数前使用: &
function demo6(string &$name)
{
$name = '灭绝老师';
}
echo "$name";
demo6($name);
echo '<br>';
echo "$name ";
`
php多值返回
数组
<?php
function myfunc(): array
{
// return返回值是文本必选是双括号
return ['status' => 1, 'message' => '验证成功'];
};
print_r( myfunc());
php在数据库中前后端验证用法
<?php
function myfunc(): array
{
return ['status' => 1, 'message' => '验证成功'];
};
// print_r( myfunc());
echo '<br>';
$res=myfunc();
echo $res['status']=== 1 ? $res['message']:'验证失败';
php多值返回
类
<?php
function myfunc(): object
{
return new class(){
public $name = 'admin';
public $email = 'admin@php.cn';
};
}
$user=myfunc();
printf('name = %s<br>email = %s<hr>', $user->name, $user->email);
php多值返回
序列化字符串
<?php
// 3.1 php内置的序列化函数
// 如果有一些数据需要进行网络传输或保存到文件或数据表中的时候要用到它
// 如果这个序列化的数据只在php程序中使用,应该使用php内置的方法就可以了
function demo3(): string
{
// serialize序列化函数
return serialize(['status' => 1, 'message' => '验证成功']);
}
$str = demo3();
echo $str;
// file_put_contents('file.txt', $str);
// 在php中使用时要还原成原来的类型
$arr = unserialize($str);
var_dump($arr);
echo '<hr>';
php多值返回
json
<?php
// 3.2 转为通用的json格式的字符串
// 这样就可以与其它编程语言进行数据交换,例如与前端js,java,python...
function demo4(): string
{
return json_encode(['status' => 1, 'message' => '验证成功'], JSON_UNESCAPED_UNICODE);
}
$str = demo4();
echo $str;
echo '<br>';
#对象形式参看老师案例
#以下是数组形式
// 给 json_decode()传入第二个参数 : true
$res=json_decode($str, true);
var_dump($res);
echo '<br>';
printf('status = %d, message = %s<hr>',$res['status'], $res['message']);
print_r($res);
<?php
#全局成员
$name = 'chen';
$email = '123456';
function myfun(): string
{
$message = '';
// 在函数内部声明为global
global $name;
$message .= $name.'<br>';
// 以子典形式取值
$message .=$GLOBALS['email'];
return $message;
}
echo myfun();
<?php
function myfun(): string
{
$message = 'chen';
return $message;
}
echo myfun();
<?php
$name = 'chen';
$email = '123456';
function myfun(): string
{
$message = '';
// 在函数内部声明为global
global $name;
$message .= $name.'<br>';
// 以子典形式取值
$message .=$GLOBALS['email'];
return $message;
};
echo myfun();
<?php
$name = 'chen';
$email = '123456';
$myfun=function () use($name, $email)
{
return sprintf($name,$email);
};
echo $myfun();
闭包引用传参
<?php
$name = 'chen';
$email = '123456';
// 引用传参&
$myfun=function ($myname) use(&$name)
{
$name=$myname;
};
$myfun('张');
echo $name;
闭包使用用柯里化
嵌套函数,再柯里化
<?php
function demo4($site)
{
// 返回一个函数,闭包最佳使用场景
return function ($color) use ($site) {
return sprintf('<h3 style="color:%s">%s</h3>', $color, $site);
};
}
// var_dump( demo4('php中文网'));
// $closure = demo4('php中文网');
// echo $closure('red');
// 高阶函数: 柯里化
echo demo4('php中文网')('red');
<?php
function myfun(string $name): string
{
return "$name";
};
// 传统访问
echo myfun('chen');
echo '<hr>';
// 异步执行
// call_user_func('函数','参数列表')
echo call_user_func('myfun','liu') ,'<hr>';
// call_user_func_array(函数,[参数数组])
echo call_user_func_array('myfun',['wang']);
<?php
// 这二个函数还可以异步的调用对象方法
class User
{
// 实例方法
public function hello(string $name) : string
{
return "Hello $name !";
}
// 静态方法: 类调用
public static function say(string $site) : string
{
return "欢迎来到 $site !";
}
}
// 实例方法
$res = call_user_func_array([new User, 'hello'], ['朱老师']);
echo $res,'<br>';
// 静态方法
// $res = call_user_func_array(['User', 'say'], ['php中文网']);
$res = call_user_func_array('User::say', ['php中文网']);
echo $res,'<br>';
<?php
// 静态变量
function demo1()
{
// 函数中的静态变量不会随函数调用结束而消失
// 他会自动进入到下一次的函数调用中
// 可以实现在函数的多次调用过程中:共享数据 / 数据通信
static $i = 1;
echo $i,'<br>';
$i++;
}
// echo $i;
echo demo1();
echo demo1();
echo demo1();
echo demo1();
echo demo1();