Blogger Information
Blog 94
fans 0
comment 0
visits 92715
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
【PHP】函数、类与对象
可乐随笔
Original
1397 people have browsed it

函数、类与对象

1.函数、类与对象

  1. <?php
  2. //todo 函数
  3. // 1. 声明:php7.3之后,强制要求定义参数类型(强类型)
  4. function sum(int $a, int $b): void
  5. {
  6. // 返回 int
  7. // return $a + $b;
  8. //返回类型:string
  9. // return '$a + $b =' . ($a + $b);
  10. // 直接打印,没有return
  11. // vprintf("%d + %d = %d", [$a,$b,$a+$b]);
  12. }
  13. // 2.调用
  14. // echo sum(10, 20);
  15. // echo sum(10,'php');
  16. // 3.参数
  17. // PHP禁止函数重载,同一作用域,存在同名函数,根据参数不同判断调用那个函数
  18. function sum1(int $a, int $b, int $c = 0): int
  19. {
  20. return array_sum([$a, $b, $c]);
  21. }
  22. // 3.1 参数太少
  23. echo sum1(1, 2, 3), "\n";
  24. // echo sum1(1, 2), "\n";
  25. // 3.2 参数太多:可变参数(js,...rest)
  26. function sum2(...$args): int
  27. {
  28. return array_sum($args);
  29. }
  30. // echo sum2(1, 2, 3, 4, 5) . "\n";
  31. // ...rest用在调用时,执行的不是压入,而是展开
  32. // $arr = [1,2,3,4,5];
  33. // range函数,第1位是开始数,第2位是结束数,第3位是步长
  34. $arr = range(1, 9, 2);
  35. // echo sum2(...$arr);
  36. // 3.3 引用参数
  37. function sum3($a)
  38. {
  39. return $a + 10 ."\n";
  40. }
  41. $a = 10;
  42. echo sum3($a);
  43. // 4.返回值,默认单值,多值返回用数组
  44. function fn1(){
  45. // return ['admin','admin@qq.com'];
  46. return ['name'=>'admin','email'=>'admin@qq.com'];
  47. }
  48. print_r(fn1());
  49. // list($name,$email) = fn1();
  50. //简化
  51. // [$name,$email] = fn1();
  52. ['name'=>$name,'email'=>$email] = fn1();
  53. echo "$name ( $email )";
  54. echo "\n";
  55. function add($a,$b,$c){
  56. return array_sum([$a,$b,$c]);
  57. }
  58. echo add(10,20,30) . "\n";
  59. //回调的方式调用一个函数
  60. echo call_user_func('add',20,30,40) . "\n";
  61. echo call_user_func_array('add',[30,40,50]) . "\n";

2.类与对象

  1. <?php
  2. // 类与对象
  3. /**
  4. * class:声明类
  5. * new:类的实例化
  6. * public:访问限制符(公开成员/默认值)
  7. * private:仅限类中访问
  8. * $this:当前类实例的引用,只能用在类中
  9. * __get($name):属性重载,拦截非法属性读访问
  10. * __get($name,$value):属性重载,拦截非法属性写属性
  11. */
  12. //类声明
  13. class Demo
  14. {
  15. //属性:变量
  16. // 访问限制符+属性:public,公开成员(默认)
  17. public string $name;
  18. private int $salary;
  19. // 构造方法:在类实例化时自动调用
  20. // __method:魔术方法,用户不能直接调用,由php调用
  21. // 用途:给属性设置初始化值
  22. public function __construct($name, $salary)
  23. {
  24. $this->name = $name;
  25. $this->salary = $salary;
  26. }
  27. // 内部方法
  28. // public function getSalary()
  29. // {
  30. // return $this->salary;
  31. // }
  32. // public function setSalary($value)
  33. // {
  34. // return $this->salary = $value;
  35. // }
  36. // 属性重载,拦截外部的非常属性访问
  37. // __get()获取器,当获取一个不存在的或无权限访问的属性时触发
  38. public function __get($name)
  39. {
  40. if ($name === 'salary') {
  41. return $this->$name;
  42. }
  43. }
  44. // __get()设置器,两个参数(属性名,新值)
  45. public function __set($name, $value)
  46. {
  47. $this->$name += $value;
  48. }
  49. //格式化打印
  50. private function hello()
  51. {
  52. return <<< DATA
  53. $this->name :
  54. 工资($this->salary)
  55. 年龄($this->age)
  56. DATA;
  57. }
  58. //普通方法重载:__call()
  59. // $name:方法名称,$arguments:参数数组
  60. public function __call($name, $arguments)
  61. {
  62. // return $name . ',' . join('.', $arguments);
  63. if ($name === 'hello') {
  64. return <<< DATA
  65. $this->name :
  66. 工资($this->salary)
  67. 年龄($this->age)
  68. DATA;
  69. }
  70. if($name === 'sum'){
  71. return array_sum($arguments);
  72. }
  73. }
  74. }
  75. // 类实例化:对象
  76. $obj = new Demo('老马', 6000);
  77. // var_dump($obj);
  78. // 调用内部方法
  79. // echo $obj->getSalary() . "\n";
  80. // $obj->setSalary(8000) . "\n";
  81. // echo $obj->getSalary() . "\n";
  82. // 调用设置器和获取器
  83. echo $obj->salary . "\n";
  84. $obj->salary = 3000;
  85. echo $obj->salary . "\n";
  86. $obj->age = 40;
  87. echo $obj->age, "\n";
  88. echo $obj->hello('a','b','c') . "\n";
  89. // call_user_func
  90. // call_user_func_array
  91. // 用它调用对象的方法
  92. echo call_user_func([$obj,'sum'],10,20,30) . "\n";
  93. echo call_user_func_array([$obj,'sum'],[40,50,60]) . "\n";
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post