Blogger Information
Blog 19
fans 0
comment 0
visits 13202
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
静态、抽象、类常量、接口、后期静态绑定以及魔术方法
王浩
Original
552 people have browsed it
  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. }
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
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