类常量图片.png

  1. <?php
  2. class Person{
  3. //在类里面不仅可以定义成员属性和成员方法还可以定义常量,通过const关键字
  4. const ABC=1000;
  5. public $name;
  6. public $age;
  7. //定义了常量之后怎么使用呢?
  8. //在类的外部使用常量 类名::常量名 (或者$obj::常量名)
  9. //在类的内部使用常量 self::常量名 (或者$this::常量名) self:就是当前类名
  10. function test(){
  11. echo self::ABC;
  12. }
  13. }
  14. //在类的外部可以通过: 类名::常量名 (或者$obj::常量名)
  15. echo Person::ABC;//1000
  16. $niu=new Person();
  17. $niu->test();//1000
  18. //在类的内部定义常量用const,外部定义常量用define,虽然const也可以在外部定义,但是我们一般不这么用
  19. //常量前面不能加修饰符比如public

静态属性和方法

图片.png图片.png
静态属性和静态方法对应的是对象的属性和对象方法
对象属性和对象方法都是属于某个对象的,而静态属性和静态方法不是属于某一对象的,它是属于整个类的。
静态属性和静态方法为什么效率高?
因为不用创建对象,直接通过类名就可以直接访问

静态方法中不能出现$this关键字原因:
因为静态方法是属于整个类的,不是属于某个对象的,那么我们的$this表示当前对象

  1. <?php
  2. class Person
  3. {
  4. public static $name='小芳'; //静态属性,属于整个类,不属于某个特定对象
  5. public static function test() //静态方法 (static和public位置可以互换)
  6. {
  7. echo '这是静态方法';
  8. }
  9. public function demo() {
  10. echo self::$name;
  11. self::test();
  12. }
  13. }
  14. $niu=new Person();
  15. $niu->demo();
  16. echo Person::$name;//这里要$(通过对象访问自己成员属性的时候没有$,访问静态属性的时候要$)
  17. Person::test();
  18. /*
  19. 静态属性调用方法:
  20. 类外
  21. 类名::静态属性名(或者$obj::静态属性名)
  22. 类内
  23. self::静态属性名(或者$this::静态属性名)
  24. 静态方法调用方法:
  25. 类外
  26. 类名::静态方法名(或者$obj::静态方法名 $obj->静态方法名)
  27. 类内
  28. self::静态方法名(或者$this::静态方法名 $this->静态方法名)
  29. */