PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

博客列表 > 静态、抽象、类常量、接口、后期静态绑定以及魔术方法

静态、抽象、类常量、接口、后期静态绑定以及魔术方法

王浩
王浩 原创
2021年10月21日 22:29:32 526浏览
  1. 作业内容:1、练习课上所学知识

1.静态成员和静态方法

static

  1. <?php
  2. class A{
  3. // 静态成员变量
  4. public static $num;
  5. // 静态成员方法
  6. public static function AddNum(){
  7. self::$num++;
  8. }
  9. public function MyAddNum(){
  10. // $this->num++; //这句是错的。不能这样调用静态成员变量
  11. self::$num++;
  12. }
  13. public static function ShowNum(){
  14. echo self::$num;
  15. }
  16. }
  17. $a = new A();
  18. $a->MyAddNum(); // 能过普通方法改变静态成员变量
  19. A::ShowNum(); // 调用静态成员方法,输出1
  20. $b = new A();
  21. $b->MyAddNum();
  22. A::ShowNum(); // 输出2

2.抽象类

abstract

  1. <?php
  2. // 抽象类
  3. abstract class A{
  4. abstract public function say();
  5. }
  6. //继承抽象类,要把抽象类的方法重写
  7. class B extends A{
  8. public function say(){
  9. echo '说话';
  10. }
  11. }
  12. $b = new B();
  13. $b->say();

3.类常量

const

  1. class A{
  2. const APP_NAME = '常量';
  3. public function get_name(){
  4. return self::APP_NAME;
  5. }
  6. }
  7. // 外部访问方法
  8. echo A::APP_NAME;
  9. $a = new A();
  10. echo $a->get_name();

4.接口

接口里,只允许声明2个成员:1、常量;2、抽象方法

关键词:interface声明接口,implements使用接口

  1. interface File{
  2. // 抽象方法
  3. public function a();
  4. public function b($x,$y);
  5. }
  1. class Teacher implements File{
  2. public function a(){
  3. //...
  4. }
  5. }

5.后期静态绑定

也叫延迟静态绑定,关键词:static,取代静态self

  1. <?php
  2. class A{
  3. public static function test(){
  4. echo 'A - test()';
  5. }
  6. public function show1(){
  7. return self::test();
  8. }
  9. public function show2
  10. // 后期延迟绑定
  11. return static::test();
  12. }
  13. }
  14. class B extends A{
  15. public static function test(){
  16. echo 'B - test()';
  17. }
  18. }
  19. $a = new A();
  20. $b = new B();
  21. $a->show1(); // A - test()
  22. $b->show1(); // A - test()
  23. $a->show2(); // A - test()
  24. $b->show2(); // B - test()

6.魔术方法

6.1构造和析构

__construct 构造方法,在new类的时候,自动执行

__destruct 析构方法,在类注销(执行结束)的时候,自动执行

类遵循先进后出的原则,如下示例:

  1. <?php
  2. class A{
  3. public $n;
  4. public function __construct($n){
  5. $this->n = $n;
  6. echo $this->n.'构造<br>';
  7. }
  8. public function __destruct(){
  9. echo $this->n.'析构<br>';
  10. }
  11. public function __get($name){
  12. echo $this->$name;
  13. }
  14. }
  15. $a = new A('a');
  16. $b = new A('b');

输出:

  1. a构造
  2. b构造
  3. b析构
  4. a析构

6.2.属性重载

__get,获取不可见和未定义的属性,触发这个魔术方法

__set,修改成员变量的时候,触发

6.3.方法重载

__call,有两个参数

  1. public function __call($key, $value){
  2. // $key => 对应调用的方法名;
  3. // $value => 对应的参数;
  4. }

6.4 访问未定义的静态方法触发

__callStatic

  1. public static function __callStatic($key, $value){
  2. // $key => 对应调用的方法名;
  3. // $value => 对应的参数;
  4. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议