欢迎光临
感谢一路有你

OOP面向对象基础-关键字

如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
 

final

用于修饰方法和类,不能修饰属性

特点:
1. final修饰的类不能被继承
2. 用final 修饰的方法不能被覆盖重写==

应用:
登录时,账号密码的验证

static 静态

定义:用于修饰属性和方法, 不能修饰类

修饰的属性:静态属性 只能使用静态方式去访问, 在类的外面调用 类名::$属性名 内部 self::$属性名

修饰的方法:静态方法 只能使用静态方式去访问, 在类的外面调用 类名::$方法名 内部 self::$方法名

静态方法里面不能出现 $this ,静态的属性值不能修改

类中的一些方法没什么联系可以把他们设置为静态方法

实现设计模式

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. 判断是否存在
例子
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:不能定义再类里面定义

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 类名)

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;

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. 在被克隆时候,可以重置或更改相关属性


//克隆 对象中有对象,克隆时,都增加 //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;
赞(0) 打赏
未经允许不得转载:王明昌博客 » OOP面向对象基础-关键字
分享到: 更多 (0)

相关推荐

  • 暂无文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

×
订阅图标按钮