Blogger Information
Blog 3
fans 0
comment 0
visits 2900
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
多态,方法修饰符,接口,常量,加载类
forwt的博客
Original
808 people have browsed it
  • 多态

    • oop面向对象编程三大特性:封装,继承,多态

    • 多态分为:重写,重载(php不支持)

      • 重写:子类重写了父类的同名方法

      • 注意:子类中覆盖的方法不能比父类的方法访问权限更加严格

  • 方法修饰符

    • static (静态的)

      • 1-1

        • 1. 静态属性在加载类的时候分配空间,所以不需要实例化就可以直接访问

        • 2.访问静态成员语法:类名::静态成员 

        • 3.静态成员在内存只有就一份,为所有的实例公共。

        • 4. 静态成员不能访问普通成员,只能访问静态成员。因为静态成员被创建的时候可能还没有任何实例被实例化

        • 5.static修饰属性成为静态属性,static修饰方法成为静态方法

      • 1-2 self

        • self表示当前类的名字

        • 1.png

        • 注意:非静态方法被self::调用,自动转成静态方法 不能调用普通属性(在类没有实例化之前 普通属性没有分配空间)

        • 2.png

      • 1-3 静态成员可以被继承

      • 1-4  确定当前对象(静态延时绑定)

        • 【static::静态成员】称为延时绑定,static表示的是一个类,具体表示什么类在运行时确定,表示的是当前对象所在的类

    • final(最终的)

      • final修饰的类不能被继承

      • final修饰的方法不能重写

    • abstruct(抽象的)

      • abstruct修饰的方法叫抽象方法,abstruct修饰的类叫抽象类

      • 如果只有方法的声明而没有方法的实现成为抽象方法

      • 如果一个类中有一个方法是抽象方法,那么这个类就是抽象类

      •  抽象类不允许实例化,必须在子类中重新实现才能实例化

      • 抽象类的作用:

        • 定义统一的方法名称

        • 防止实例化

  • 接口(interface)

    •  如果一个类中所有的方法全都是抽象方法,那么这个类就可以声明成接口

    • 接口是一个特殊的抽象类

    •  接口中的抽象方法只能是public的,默认也是public权限

    • 通过implements类实现接口

    •  不能通过final和abstract修饰接口中的抽象方法

    • 类不允许多重继承,接口允许多重实现

    • 先继承类,后实现接口

      •  继承类同时实现接口

      • 4.png

  • 类常量

    • 补充:类(接口)中可以放属性、方法、常量。

    • 类常量用const定义

  • 父类可以指向子类的引用

  • 类的自动加载

    • 在项目中

    •  一个文件中存放一个类

    • 文件名与类名同名

    • 以.class.php结尾

    • 当页面执行的时候,通过PHP核心程序(Zend Engine)判断用户脚本需要哪个类。如果没有找到,会自动的调用__autoload()函数,并且会将缺少的类名传递给__autoload()函数,我们只需要在__autoload函数中加载缺少的类即可。

    • 手动加载类

      • 1.9.1	手动加载类
        require 'Goods.class.php';
        require 'Books.class.php';
        require 'Phone.class.php';
        $book=new Books();
        $phone=new Phone();
        $book->setName('PHP入门与精通');
        $phone->setName('诺基亚2100');
        $book->getName();
        $phone->getName();
    • 自动加载类

      • 类文件存放在同一个目录下

      • 1.png

    • 将类的地址映射到数组中加载

      • 类文件存放的地址不规则

      • function __autoload($class_name) {
        	$map=array(
        		'Goods'	=>	'./aa/Goods.class.php',
        		'Books'	=>	'./bb/Books.class.php',
        		'Phone'	=>	'./cc/Phone.class.php'
        	);
        	require $map[$class_name];
        }
    • 利用命名规则加载类

      • 将同一类型的类文件放在同一个目录下。

      • $book=new BooksLib();
        $phone=new PhoneLib();
        $book->setName('PHP入门与精通');
        $phone->setName('诺基亚2100');
        $book->getName();
        $phone->getName();
        
        //通过命名规则加载类
        function __autoload($class_name) {
        	if(substr($class_name,-3)=='Lib'){
        		require "./Lib/{$class_name}.class.php";
        	}
        }

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