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

Static静态

[复制链接]

304

主题

42

回帖

1348

积分

管理员

积分
1348
发表于 2021-4-22 12:33:54 | 显示全部楼层 |阅读模式
回顾
  1. <?php
  2.        
  3.         function test()
  4.         {
  5.                 $num = 0;
  6.                 $num++;
  7.                 return $num;
  8.         }
  9.         var_dump(test());
  10.         var_dump(test());


  11.         function testStatic()
  12.         {
  13.                 static $num = 0;
  14.                 $num++;
  15.                 return $num;
  16.         }
  17.         var_dump(testStatic());
  18.         var_dump(testStatic());
  19.        
复制代码
静态的访问与声明
  1. <?php

  2. /*

  3.         static 静态
  4.                 1. 修饰属性和方法
  5.                 2. 访问静态属性需要添加 $ ,没有 $ 访问的则是类常量。

  6.                 3. 访问类常量、静态成员,使用的都是 范围操作符来访问。
  7. */

  8. class Foo
  9. {
  10.         // 类常量
  11.         CONST CN = '中国';

  12.         // 静态属性
  13.         static public $num = 100;

  14.         public $base;

  15.         // 静态方法
  16.         static public function list()
  17.         {
  18.                 echo 'list<br>';
  19.         }


  20.         static public function test()
  21.         {
  22.                 echo 'test<br>';
  23.                 // 内部使用 self 访问静态方法
  24.                 self::example();
  25.                 // 内部使用 self 访问类常量
  26.                 var_dump(self::CN);
  27.                 // 内部使用 self 访问静态属性
  28.                 var_dump(self::$num);
  29.         }

  30.         protected static function example()
  31.         {
  32.                 echo 'eample<br>';
  33.         }
  34. }

  35. // 访问
  36. // 1. 外部访问 ClassName::$static
  37. var_dump(Foo::$num);

  38. var_dump(FOO::CN);

  39. // 静态方法调用
  40. FOO::list();

  41. // 2. 内部访问 self::$static
  42. FOO::test();
复制代码
静态调用的约束
  1. <?php

  2. /*

  3.         static 静态
  4.                 1. 修饰属性和方法
  5.                 2. 访问静态属性需要添加 $ ,没有 $ 访问的则是类常量。

  6.                 3. 访问类常量、静态成员,使用的都是 范围操作符来访问。

  7.                 4. 静态方法里面不允许出现 $this 。
  8. */

  9. class Foo
  10. {
  11.         // 静态属性
  12.         static public $num = 100;

  13.         // 静态方法
  14.         static public function test()
  15.         {
  16.                 echo 'test<Br>';
  17.                 // 调用普通方法
  18.                 // $this->eamp();
  19.         }

  20.         // 普通方法
  21.         public function exam()
  22.         {
  23.                 echo 'exam<br>';
  24.                 // 调用静态方法
  25.                 self::test();
  26.         }

  27. }

  28. // 访问
  29. // 1. 外部访问 ClassName::$static
  30. var_dump(Foo::$num);

  31. // 2. 内部访问 self::$static
  32. FOO::test();

  33. $foo = new Foo();
  34. var_dump($foo);

  35. $foo::test();
  36. $foo->exam();
复制代码
普通方法的属性是重新初始化的
  1. <?php

  2. // 普通方法,重新初始化
  3. class Ca
  4. {
  5.         public $money = 200;

  6.         public function getMoney(int $money) : int
  7.         {
  8.                 $this->money -= $money;

  9.                 return $this->money;
  10.         }
  11. }

  12. $lili = new Ca();
  13. $lili->getMoney(100);
  14. var_dump($lili);

  15. $rose = new Ca();
  16. $rose->getMoney(105);
  17. var_dump($rose);
复制代码
静态属性不释放内存
  1. <?php

  2. // 普通方法,重新初始化
  3. class Ca
  4. {
  5.         static public $money = 500;

  6.         public function getMoney(int $money) : int
  7.         {
  8.                 self::$money -= $money;

  9.                 return self::$money;
  10.         }

  11.         public function checkMoney()
  12.         {
  13.                 return self::$money;
  14.         }
  15. }

  16. $lili = new Ca();
  17. $lili->getMoney(100);

  18. $rose = new Ca();
  19. $rose->getMoney(200);

  20. var_dump($lili->checkMoney());
  21. var_dump($rose->checkMoney());
复制代码


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 20:47 , Processed in 0.073361 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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