1. final 关键字;
- 在PHP5中新增加了 final 关键字,它只能用来修饰类和方法。不能使用 final 这个关键字来修饰成员属性。
- final 的特性:
- 使用 final 关键字标识的类不能被继承
- 使用 final 关键字标识的方法不能被子类覆盖(重写),是最终版本
- 目的:一是为了安全,二是没必要被继承或重写
- 实例:demo.class.php
<?php
final class demo{
final public function say(){
echo "demo say";
}
}
class demo1 extends demo{
public function say(){
echo "demo1 say";
}
}
2. static 关键字;
- static 关键字表示静态的意思,用于修饰类的成员属性和成员方法(即静态属性和静态方法)。
- 类中的静态属性和方法不用实例化对象(new)就可以直接使用类名访问。
# 格式
类::$静态属性
类::静态方法
- 在类的方法中,不能用 $this 来引用静态变量或静态方法,而需要用 self 来引用。
# 格式
self::$静态属性
self::静态方法
- 静态方法中不可以使用非静态的内容。就是不让使用 $this。
- $this 代表本对象,而对象实例化出来是放在动态内存中,所以说它是非静态的内容,在静态方法中是不可以使用的
- 静态属性是共享的。也就是 new 很多对象,很多对象都可以访问这个静态属性。
- 在 PHP 核心语法中,声明自定义函数的时候,可以定义静态的变量,这个变量也是共享的。
- 其中静态变量有一个很大的特性就是”只能初始化一次“。
- 实例:demo.class.php
<?php
class demo{
static public $name = "zhangsan";
static public $num = 0;
public function __construct(){
self::$num++;
}
static public function say(){
return self::$name;
}
}
echo demo::$name;
echo demo::say();
$d1 = new demo();
echo "<br />";
echo demo::$num;
$d2 = new demo();
echo "<br />";
echo demo::$num;
3. 单例设计模式;
- 单例模式的主要作用是保证在面向对象编程设计中,一个类只能有一个实例对象存在。
- 实例:db.class.php
# 用静态成员属性和静态成员方法实现单例设计模式(只能有一个对象)
# 注释操作步骤
# 让类不能外部实例化,把构造方法设置成私有(private)
# 声明一个静态(static)的 getObj() 的方法,它可以不需要对象就可以从类的外部访问。
# 声明这个方法的目的就是为了得到对象,怎么得到呢,new DB()。
# 接下去 var_dump(DB::getObj()),你会发现一样实例化成功了,构造方法已经执行,打印出了一个对象
# 然而再 var_dump(DB::getObj()),构造方法又运行了一次,证明了还是实例化了两次,不符合需求。
# 说明实例化的过程要有选择的实例化,用 if 来控制一下。
# 判断一下没有实例化的时候,就实例化一次,如果已经实例化,就直接返回实例化的结果。
# 设置一个静态(static)的成员属性 $obj = null
# 在 getObj() 里判断静态的成员属性($obj)为空的话,就实例化结果(new DB()),并赋给静态成员属性 $obj
# 因为静态属性只能初始化一次这个特性,第二次再调用 getObj() 的时候,$obj 的值就已经是对象了,对象直接返回就行。
# 此时会发现构造方法就只执行了一次,返回对象两次。
# 证明了不管调用多少次,实例化的过程只有一次,保证这个程序只有一个对象产生,这就是单例设计模式。
<?php
class DB{
static $obj = null;
private function __construct(){
echo "mysql linked....";
}
static function getObj(){
if(is_null(self::$obj)){
self::$obj = new self();
}
return self::$obj;
}
public function select(){
echo "select data....";
}
}
var_dump(DB::getObj());
var_dump(DB::getObj());
var_dump(DB::getObj());
4. const 关键字;
- const 是一个在类中定义常量的关键字,我们都知道在 PHP 中定义常量使用的是 define() 这个函数,但是在类里面定义常量使用的是 const 这个关键字
# 语法
# 不需要实例化对象即可获取
const CONSTANT = ‘constant value’; //定义
echo self::CONSTANT; //类内部访问
echo className::CONSTANT; //类外部访问
<?php
class demo{
const HOST = '127.0.0.1';
const DB_NAME = 'test';
public function getConst(){
return self::DB_NAME;
}
}
echo demo::HOST;
echo "<hr />";
$demo = new demo();
echo $demo -> getConst();
5. instanceof 关键字。
- Instanceof 关键字用于检测用于检测当前对象实例是否属于某一个类或这个类的子类
- 实例:demo.class.php
<?php
class demo{
}
class demo1 extends demo{
}
$demo = new demo();
$demo1 = new demo1();
var_dump($demo instanceof demo);
var_dump($demo1 instanceof demo1);
var_dump($demo instanceof demo1);
var_dump($demo1 instanceof demo);