Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
<?php
// 函数
// 函数的申明,int说明参数是要整数类的。如果需要Return的值有除了整数外的字符,
// 需要在sum()这里加上‘:string'
function sum(int $a, int $b){
return $a + $b;
}
// 函数的调用
echo sum(20, 50);
// 如果需要参数太少,可在申明函数的时候,给参数一个默认值。如function sum($a, $b=null)
// 如果参数过多,可以用'...$参数名'如:function sum(...$args)
// 如果想引用函数内的值,可在申明函数的时候,在参数前加&
function he(&$a){
return $a += 10;
}
$a = 10;
echo he($a);
// 此时$a在全局中的值经过了函数作用,现在就是20。不在是之前申明的10
echo $a . "\n";
function fn1()
{
return ['name'=>'zhulaoshi','email'=>'zhulaoshi@php.cn'];
}
// 用解构语法
// [$name, $email]= fn1();
['name'=>$name,'email'=>$email]= fn1();
echo "$name ( $email ) ";
// 回调
function add($a,$b,$c){
return array_sum([$a, $b, $c]);
}
// 回调调用有两个 call_usrr_func_array 和 call_user_func,推荐使用call_user_func_array
// 因为call_user_func能做的call_user_func_array都能做
echo call_user_func_array('add', [10,20,30]);
// 类与对象
class test{
// public是公开成员
public string $name;
// private 这是私有成员,只能类中访问,类外不可见
private int $age;
private int $gz;
// __construct 是构造方法,在类实例中能自动调用。两个下滑杠的是魔术方法,用户不能调用,只能PHP调用
public function __construct($name, $age,$gz){
$this->name = $name;
$this->age = $age;
$this->gz = $gz;
}
// 属性重载, 拦截外部的非法属性访问
// __get()获取器,当获取一个不存在或无权限访问的属性时触发
public function __get($name){
if($name === 'age')
return $this->$name;
}
// __set必须有两个参数(属性名,新值)
public function __set($name,$value){
if ($name === 'gz')
$this->$name += $value;
}
private function hello($a, $b, $c)
{
return <<< DATA
$this->name :
工资($this->gz)
年龄($this->age)
DATA;
}
// 普通方法重载: __call()
// 静态方法重载: __callStatic()
// $name: 方法名称, $arguments: 参数数组
public function __call($name, $arguments)
{
if ($name === 'hello') {
return <<< DATA
$this->name :
工资($this->gz)
年龄($this->age)
DATA;
}
if ($name === 'sum') {
return array_sum($arguments);
}
}
}
$obj = new test('老师', 40,5000);
echo $obj->age;
echo $obj->gz = 2000;
echo $obj->hello('a', 'b', 'c');