如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
final
用于修饰方法和类,不能修饰属性
特点:
1. final修饰的类不能被继承
2. 用final 修饰的方法不能被覆盖重写==
应用:
登录时,账号密码的验证
static 静态
定义:用于修饰属性和方法, 不能修饰类
修饰的属性:静态属性 只能使用静态方式去访问, 在类的外面调用 类名::$属性名 内部 self::$属性名
修饰的方法:静态方法 只能使用静态方式去访问, 在类的外面调用 类名::$方法名 内部 self::$方法名
静态方法里面不能出现 $this ,静态的属性值不能修改
类中的一些方法没什么联系可以把他们设置为静态方法
实现设计模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class Person { public static $name = '小小'; private static $age = '18'; public function show(){ echo self::$age; // echo $this->name; 方法使用static后,不能使用$this } public function show2(){ echo self::show().",hahaha"; } public static function show3(){ echo self::$name; } } $a = new Person(); //$a ->show(); $a ->show2(); //外部调用 Person::$name; Person::show3(); |
单例设计模式
http://www.cnblogs.com/siqi/archive/2012/09/09/2667562.html
分析:
一个类只允许一个对象使用
- 先禁止生成对象
- 设置为静态方法
- 静态方法里实例化对象
- 判断是否存在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
例子 class Demo { private static $obj = null; //禁止生成对象 private function __construct() { } public static function getObj(){ if(self::$obj == null){ return self::$obj = new Demo(); }else{ return self::$obj; } } } $a = Demo::getObj(); $b = Demo::getObj(); $c = Demo::getObj(); var_dump($a); var_dump($b); var_dump($c); //输出结果: // object(Demo)#1 (0) { } object(Demo)#1 (0) { } object(Demo)#1 (0) { } YES //两个等号,判断是否是同类,三个等号,值等方面是否相同 if($a === $b){ echo "YES"; }else{ echo "NO"; } |
const
const 常量名 = 常量值;
不能进行运算,if/循环 里面不能使用const定义常量
可以在类里面定义 ,在类的内部使用 self::常量名
可以在类里面定义 ,在类的外部使用 类名::常量名
define:不能定义再类里面定义
1 2 3 4 5 6 7 8 9 10 11 |
class Person { const A = 'aaaa'; public static function show(){ echo self::A;//可以在类里面定义 ,在类的内部使用 self::常量名 } } //Person::show();//aaaa echo Person::A;//aaaa 可以在类里面定义 ,在类的外部使用 类名::常量名 |
instanceof 关键字
判断一个对象是否属于某个类 或该类的子类的实例
$c instanceof A
(实例化的对象 instanceof 类名)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class A{} class B{} class C extends A{} $a = new A(); $b = new B(); $c = new C(); if($c instanceof A){ echo "YES"; }else{ echo "NO"; } |
clone 克隆对象
对象的引用赋值,
克隆语法 $a = clone $b;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class A { public $name = 'zz'; } $a = new A; //var_dump($a);//object(A)#1 (1) { ["name"]=> string(2) "zz" } //$a->name = 'xx'; //$b = $a; //var_dump($b);//object(A)#1 (1) { ["name"]=> string(2) "xx" } //var_dump($a);//object(A)#1 (1) { ["name"]=> string(2) "xx" } var_dump($a); $c = clone $a; var_dump($c); //object(A)#1 (1) { ["name"]=> string(2) "zz" } object(A)#2 (1) { ["name"]=> string(2) "zz" } |
__clone魔术方法
在该对象被克隆时,自动调用
作用 :
1. 如果封装该方法,那么会使对象不能被克隆
2. 将属性里对象值,在被克隆时,也进行克隆
3. 在被克隆时候,可以重置或更改相关属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<br />//克隆 对象中有对象,克隆时,都增加 //object(B)#3 (1) { ["obj"]=> object(A)#4 (1) { ["name"]=> string(3) "aaa" } } class A { public $name = "aaa"; } class B { public $obj = null; public function __construct($obj) { //实例化的时候传入一个对象 $this->obj = $obj; } public function __clone() { $this->obj = clone $this->obj; } } $m = new B(new A); var_dump($m); $n = clone $m; |