1.final关键字
1.final关键字
//final关键字修饰的类 是最终的类不能被继承
class demo{
//final关键字修饰的成员方法 是最终版本的方法不能被重写
final public function say(){
echo "demo say";
}
}
class demo1 extends demo{
public function say(){
echo "demo1 say";
}
}
$d1 = new demo1();
$d1 -> say();
2. static 关键字
2. static 关键字
//用于修饰类的成员属性和成员方法,静态的成员属性和静态的成员方法
//内部访问;外部可以不用实例化就可以直接访问
//为什么要用static关键字
//只能初始化一次
//访问方式:self::$name self::say()
//访问控制:public protected private
class demo{
//static 如果修饰成员属性。这个成员属性就是静态的成员属性
static public $name = "HelloWorld";
static public $num = 0; //静态的成员属性只能初始化一次。所有实例化的对象访问的都是同一个静态成员属性
public function __construct(){
self::$num++;
}
//static 如果修饰成员方法。这个方法就是静态的成员方法
static public function say(){
//self 代表本类
return self::$name; //在类的内部访问静态成员属性 self::成员属性名
}
}
echo demo::$name; //在类的外部访问静态的成员属性。类名::成员属性名
echo demo::say(); //在类的外部访问静态的成员方法。类名::成员方法名
$d1 = new demo();
echo "<br />";
echo demo::$num;
$d2 = new demo();
echo "<br />";
echo demo::$num;
3.单例设计模式
3.单例设计模式
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.instanceof 关键字
4.instanceof 关键字
class demo{
}
class demo1 extends demo{
}
$demo = new demo();
$demo1 = new demo1();
//instanceof 可以用于判断一个对象是否由一个类或这个类子类实例化来的
var_dump($demo instanceof demo);
var_dump($demo1 instanceof demo1);
var_dump($demo instanceof demo1);
var_dump($demo1 instanceof demo);
5.const关键字
5.const 关键字
class demo{
//类里面定义常量用const
//常量定义时就要赋初始值
//常量一但定义就不能修改
//如果是多个单词组成的常量名要用下划线分隔
const HOST = '127.0.0.1';
const DB_NAME = 'jike';
public function getConst(){
//在类的内部访问常量 self::常量名
return self::DB_NAME;
}
}
//在类的外部访问常量 类名::常量名
echo demo::HOST;
echo "<hr />";
$demo = new demo();
echo $demo -> getConst();