找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1010|回复: 0

构造方法与析构方法

[复制链接]

304

主题

42

回帖

1338

积分

管理员

积分
1338
发表于 2021-4-21 23:21:57 | 显示全部楼层 |阅读模式
1、构造方法
  1. <?php

  2. /*
  3.         __construct()

  4.                 作用:用于成员属性的初始化
  5.                 特点:当对象呗实例化时,自动调用。例如 new ClassName()

  6. */

  7. class User
  8. {
  9.         public $name;
  10.         public $age;

  11.         // 构造方法
  12.         // 执行时机:当实例化对象的时候,自动调用
  13.         public function __construct(string $name, int $age)
  14.         {
  15.                 // $this 伪变量。代表的是对象,表示的是自己。

  16.                 echo 'consturct:' . $name . $age;

  17.                 // 数据初始化
  18.                 $this->name = $name;
  19.                 $this->age = $age;
  20.         }

  21.         /*
  22.         旧版本 的构造方法
  23.         public function User()
  24.         {

  25.         }
  26.         */

  27.         public function info() : array
  28.         {
  29.                 return ['name' => $this->name, 'age' => $this->age];
  30.         }
  31. }

  32. // $user = new User();
  33. // $user->name = '张三';
  34. // $user->age = 28;
  35. // $list = $user->info();
  36. // echo '<pre>';
  37. //         print_r($list);
  38. // echo '</pre>';

  39. // $user2 = new User();
  40. // $user2->name = '李四';
  41. // $user2->age = 29;
  42. // $list = $user2->info();
  43. // echo '<pre>';
  44. //         print_r($list);
  45. // echo '</pre>';

  46. $zs = new User('张三', 28);
  47. echo '<pre>';
  48.         print_r($zs);
  49. echo '</pre>';

  50. $ls = new User('李四', 29);
  51. echo '<pre>';
  52.         print_r($ls);
  53. echo '</pre>';
复制代码
2、析构方法的使用
  1. <?php

  2. /*
  3. // 获取MIME
  4. // 1. 创建一个 finfo 资源
  5. $finfo = finfo_open(FILEINFO_MIME_TYPE);
  6. var_dump($finfo);

  7. // 2. 获取MIME类型
  8. $mime = finfo_file($finfo, './image/1.png');
  9. var_dump($mime);

  10. // 3. 关闭 finfo 资源
  11. finfo_close($finfo);
  12. */


  13. class Finfos
  14. {
  15.         // 文件名
  16.         public $fileName = '';

  17.         // finfo 资源
  18.         public $finfo = null;

  19.         // 构造方法
  20.         public function __construct(string $fileName)
  21.         {
  22.                 // 属性初始化
  23.                 $this->fileName = $fileName;

  24.                 // 1. 创建一个 finfo 资源
  25.                 $this->finfo = finfo_open(FILEINFO_MIME_TYPE);
  26.         }

  27.         // 声明获取MIME类型的方法
  28.         public function mime()
  29.         {
  30.                 // 2. 获取MIME类型
  31.                 $mime = finfo_file($this->finfo, $this->fileName);

  32.                 return $mime;
  33.         }

  34.         // 析构方法
  35.         // 作用:释放资源,回收垃圾
  36.         // 特点:对象被销毁时自动调用。
  37.         public function __destruct()
  38.         {
  39.                 // 3. 关闭 finfo 资源
  40.                 finfo_close($this->finfo);
  41.         }

  42. }

  43. $finfo = new Finfos('./image/1.png');
  44. $mime = $finfo->mime();
  45. echo '<pre>';
  46.         print_r($finfo);
  47. echo '</pre>';
  48. var_dump($mime);
复制代码
构造方法的注意事项
  1. <?php

  2. class User
  3. {
  4.         public $name;
  5.         public $age;

  6.         // 构造方法
  7.         // 执行时机:当实例化对象的时候,自动调用
  8.         public function __construct(string $name, int $age)
  9.         {
  10.                 // $this 伪变量。代表的是对象,表示的是自己。

  11.                 echo 'consturct:' . $name . $age;


  12.                 // 数据初始化
  13.                 $this->name = $name;
  14.                 $this->age = $age;

  15.                 // 仍然可以终止后面的执行
  16.                 return false;
  17.                 echo 'end.';

  18.                 // 构造方法是一个特殊的函数,在里面执行 return ,不会将返回值带到外部。
  19.         }

  20.         public function info() : array
  21.         {
  22.                 return ['name' => $this->name, 'age' => $this->age];
  23.         }
  24. }

  25. $zs = new User('张三', 28);
  26. $list = $zs->info();
  27. echo '<pre>';
  28.         print_r($list);
  29. echo '</pre>';

  30. $ls = new User('李四', 29);
  31. $list = $ls->info();
  32. echo '<pre>';
  33.         print_r($list);
  34. echo '</pre>';
复制代码
3、析构方法的分析
  1. <?php

  2. class Person
  3. {
  4.         public $name;
  5.         public $weight;

  6.         // 构造方法
  7.         public function __construct($name, $weight)
  8.         {
  9.                 $this->name = $name;
  10.                 $this->weight = $weight;

  11.                 echo "{$this->name} 出生了,{$this->weight} 斤!<br>";
  12.         }

  13.         // 析构方法
  14.         public function __destruct()
  15.         {
  16.                 echo "{$this->name} 那啥,说·88了!<br>";
  17.         }
  18. }

  19. // 对象销毁的分析
  20. $lili = new Person('lili', 200);
  21. echo '<pre>';
  22.         print_r($lili);
  23. echo '</pre>';

  24. $rose = new Person('rose', 300);
  25. echo '<pre>';
  26.         print_r($rose);
  27. echo '</pre>';
复制代码
4、手动销毁的情况
  1. <?php

  2. class Person
  3. {
  4.         public $name;
  5.         public $weight;

  6.         // 构造方法
  7.         public function __construct($name, $weight)
  8.         {
  9.                 $this->name = $name;
  10.                 $this->weight = $weight;

  11.                 echo "{$this->name} 出生了,{$this->weight} 斤!<br>";
  12.         }

  13.         // 析构方法
  14.         // 作用:释放资源,回收垃圾
  15.         // 特点:对象被销毁时自动调用。
  16.         public function __destruct()
  17.         {
  18.                 echo "{$this->name} 那啥,说·88了!<br>";
  19.         }
  20. }

  21. // 对象销毁的分析
  22. $lili = new Person('lili', 200);
  23. echo '<pre>';
  24.         print_r($lili);
  25. echo '</pre>';

  26. $rose = new Person('rose', 300);
  27. echo '<pre>';
  28.         print_r($rose);
  29. echo '</pre>';


  30. unset($lili);
  31. unset($rose);
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|外汇论坛 ( 粤ICP备16021788号 )

GMT+8, 2024-10-23 07:24 , Processed in 0.067145 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表