<?php//todo 函数// 1. 声明:php7.3之后,强制要求定义参数类型(强类型)function sum(int $a, int $b): void{// 返回 int// return $a + $b;//返回类型:string// return '$a + $b =' . ($a + $b);// 直接打印,没有return// vprintf("%d + %d = %d", [$a,$b,$a+$b]);}// 2.调用// echo sum(10, 20);// echo sum(10,'php');// 3.参数// PHP禁止函数重载,同一作用域,存在同名函数,根据参数不同判断调用那个函数function sum1(int $a, int $b, int $c = 0): int{return array_sum([$a, $b, $c]);}// 3.1 参数太少echo sum1(1, 2, 3), "\n";// echo sum1(1, 2), "\n";// 3.2 参数太多:可变参数(js,...rest)function sum2(...$args): int{return array_sum($args);}// echo sum2(1, 2, 3, 4, 5) . "\n";// ...rest用在调用时,执行的不是压入,而是展开// $arr = [1,2,3,4,5];// range函数,第1位是开始数,第2位是结束数,第3位是步长$arr = range(1, 9, 2);// echo sum2(...$arr);// 3.3 引用参数function sum3($a){return $a + 10 ."\n";}$a = 10;echo sum3($a);// 4.返回值,默认单值,多值返回用数组function fn1(){// return ['admin','admin@qq.com'];return ['name'=>'admin','email'=>'admin@qq.com'];}print_r(fn1());// list($name,$email) = fn1();//简化// [$name,$email] = fn1();['name'=>$name,'email'=>$email] = fn1();echo "$name ( $email )";echo "\n";function add($a,$b,$c){return array_sum([$a,$b,$c]);}echo add(10,20,30) . "\n";//回调的方式调用一个函数echo call_user_func('add',20,30,40) . "\n";echo call_user_func_array('add',[30,40,50]) . "\n";
<?php// 类与对象/*** class:声明类* new:类的实例化* public:访问限制符(公开成员/默认值)* private:仅限类中访问* $this:当前类实例的引用,只能用在类中* __get($name):属性重载,拦截非法属性读访问* __get($name,$value):属性重载,拦截非法属性写属性*///类声明class Demo{//属性:变量// 访问限制符+属性:public,公开成员(默认)public string $name;private int $salary;// 构造方法:在类实例化时自动调用// __method:魔术方法,用户不能直接调用,由php调用// 用途:给属性设置初始化值public function __construct($name, $salary){$this->name = $name;$this->salary = $salary;}// 内部方法// public function getSalary()// {// return $this->salary;// }// public function setSalary($value)// {// return $this->salary = $value;// }// 属性重载,拦截外部的非常属性访问// __get()获取器,当获取一个不存在的或无权限访问的属性时触发public function __get($name){if ($name === 'salary') {return $this->$name;}}// __get()设置器,两个参数(属性名,新值)public function __set($name, $value){$this->$name += $value;}//格式化打印private function hello(){return <<< DATA$this->name :工资($this->salary)年龄($this->age)DATA;}//普通方法重载:__call()// $name:方法名称,$arguments:参数数组public function __call($name, $arguments){// return $name . ',' . join('.', $arguments);if ($name === 'hello') {return <<< DATA$this->name :工资($this->salary)年龄($this->age)DATA;}if($name === 'sum'){return array_sum($arguments);}}}// 类实例化:对象$obj = new Demo('老马', 6000);// var_dump($obj);// 调用内部方法// echo $obj->getSalary() . "\n";// $obj->setSalary(8000) . "\n";// echo $obj->getSalary() . "\n";// 调用设置器和获取器echo $obj->salary . "\n";$obj->salary = 3000;echo $obj->salary . "\n";$obj->age = 40;echo $obj->age, "\n";echo $obj->hello('a','b','c') . "\n";// call_user_func// call_user_func_array// 用它调用对象的方法echo call_user_func([$obj,'sum'],10,20,30) . "\n";echo call_user_func_array([$obj,'sum'],[40,50,60]) . "\n";
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号