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

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. 只要是能使用静态的环境下声明方法, 就最好使用静态方法(效率)
 */
<?php
	class 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. 可以在类的内存使用一个表态方法,来创建对象
 *
 *
 */
自己的例子:

<?php
	class 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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值