PHP面向对象中常见的关键字

来源:互联网 发布:js 对象key 编辑:程序博客网 时间:2024/05/22 07:44

instanceof关键字

“instanceof”操作符用于检测当前对象实例是否属于某一个类的类型。

<?php        class Person{ ... ...  }        class Student extends Person{  ...  ...  }        $p=new Person();        $s=new Student();        echo $p instanceof Student;    //结果为false        echo $s instanceof Student ;   //结果为true        echo $s instanceof Person;    //结果为true

往大了说当然是对的~

final关键字的应用

在PHP5中新增加了final关键字,它只能用来修饰类和方法,不能使用final这个关键字来修饰成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数和const关键字,所以不能使用final来定义成员属性。
final的特性:
使用final关键字标识的类不能被继承;
使用final关键字标识的方法不能被子类覆盖(重写),是最终版本;
目的:一是为了安全,二是没有必要

     *
     *  在PHP中final不定义常量, 所以就不会使用,也不能使用final来修饰成员属性
     *
     *
     *  1. final可以修饰类  --- 这个类不能去扩展, 不能有子类 (不让别人去扩展, 这个类是最终的类时)
     *
     *  2. final可以修饰方法  --- 这个方法,就不能在子类中覆盖(不让子类去改这个方法, 或扩展这个方法的功能时, 这个方法也就时最终的方法)
     *
     */


static关键字的使用

static关键字表示静态的意思, 用于修饰类的成员属性和成员方法(即为静态属性和静态方法)。
类中的静态属性和静态方法不用实例化(new)就可以直接使用类名访问。格式:
    类::$静态属性       类::静态方法
在类的方法中,不能用this来引用静态变量或静态方法,而需要用self来引用。格式:
       self::$静态属性     self::静态方法
静态方法中不可以使用非静态的内容。就是不让使用$this。
在一个类的方法中若没有出现$this的调用,默认此方法为静态方法。
静态属性是共享的。也就是new很多对象也是共用一个属性。

<?php/*  *  static 可以修饰属性和方法, 不能修饰类 *  * *  1. 使用static 修饰成员属性, 存在内存的初使化表态段.  *  2. 可以被所有同一个类的对象共用 *  3. 第一个用到类(类名第一次出现), 类在加载到内存时, 就已经将静态的成员加到了内存 * *  对象 -> 成员 *  类 :: 成员 * *  4. 静态的成员一定要使用类来访问,  * *   5. self可以在类中的方法中, 代表自己类的($this) *   *   6. 静态成员一旦被加载, 只有脚本结束才释放 * * *   7. 在静态的方法中,是不能访问非静态的成员的 * *   8. 只要是能使用静态的环境下声明方法, 就最好使用静态方法(效率) */<?phpclass Person {static public $name="MissZhou";public $age;public $sex;static public  $country = "中国";function __construct($name, $age, $sex) {$this->name = $name;$this->age = $age;$this->sex = $sex;}public static function say(){echo "my name is : ".self::$name."<br>";echo "i am from: ".self::$country."<br>";}}echo Person::$name;@$p=new Person("zyj",22,"f");echo Person::$name;
注意啊 用类名调用的时候变量前面是要加$

单态设计模式

这应该是个挺重要的设计模式,java的视频也讲过,但是实现不同 还用的着的有:工厂模式、观察者模式、mvc

单态模式的主要作用是保证在面向对象编程设计中,一个类只能有一个实例对象存在。

<?php    class DB {        private static $obj = null;            //声明一个私有的,静态的成员属性$obj        private function __construct() {  //私有构造方法,只能在类的内部实例化对象 echo "连接数据库成功<br>";        }           public static function getInstance() {     // 通过此静态方法才能获取本类的对象            if(is_null(self::$obj))                 //如果本类中的$obj为空,说明还没有被实例化过                self::$obj = new self();         //实例化本类对象              return self::$obj;                      //返回本类的对象        }        public function query($sql) {      //执行SQL语句完成对数据库的操作            echo $sql;        }    }    $db = DB::getInstance();                  //只能使用静态方法getInstance()去获取DB类的对象    $db -> query("select * from user");   //访问对象中的成员
 * 单态(单例, 单件)设计模式 -- 最适合PHP使用这个设计模式
 *
 *
 *   1. 如果想让一个类, 只能有一个对象, 就要先让这个类, 不能创建对象 , 将构造方法 private
 *
 *   2. 可以在类的内存使用一个表态方法,来创建对象
 *
 *
 */
自己的例子:

<?phpclass person{static $name=null;private function __construct(){}static function getObj(){if(is_null(self::$name)) self::$name=new self;return self::$name;}function __destruct(){echo "#############<br>";}}$p=person::getObj();$p=person::getObj();$p=person::getObj();$p=person::getObj();$p=person::getObj();//echo $p=person::getObj();
为啥最后一句被注释掉了==因为它不对啊,O(∩_∩)O 那个是对象 不能直接转化成字符串滴~

输出结果只有################一行而已


const关键字

const是一个在类中定义常量的关键字,我们都知道在PHP中定义常量使用的是”define()”这个函数,但是在类里面定义常量使用的是”const”这个关键字
const只能修饰的成员属性(常量属性),其访问方式和static修饰的成员访问的方式差不多,也是使用”类名”,在方法里面使用”self”关键字。但是不用使用”$”符号,也不能使用对象来访问。
        const CONSTANT =‘constant value’;  //定义
        echo self::CONSTANT;        //类内部访问
        echo ClassName::CONSTANT;   //类外部访问


<?php/* *  define("常量名", "值"); *  final 定义 * *  const 修饰的成员属性为常量, 只能修饰成员属性 * * 类中 * *  1. 常量建议使用大写, 不能使用$ *  2. 常量一定要在声明时就给好初值 *  3. 常量的访问方式和static的访问方式相同, 但只能读    * *  1. 在类外部使用    类名::常量名 *  2. 在类的内部      self::常量名 * *  final 类和方法 * *  static 属性和方法 * * */class Demo {const SEX = "男";static function say() {echo "我的性别是:".self::SEX."<br>";}}Demo::say();

0 0
原创粉丝点击