php面向对象之self关键字

思考:类的内部的静态方法内可能会访问其他静态成员或者类常量,这个时候必须每次使用类名::那么如果类名修改的画岂不是很麻烦?  

引入:静态成员或者类常量的访问时必须使用类名进行访问的,不过为了方便类名的更新,减少开发者维护成本,系统引入一个类似$this代表对象的方案,self关键字来代表当前类

self关键字(自己  本身的意思)

  定义:self关键字是一种在类的内部(方法里面)使用,代替类名的写法,能够保障用户方便修改类名字。

  1.self是用来代替类名的,与范围解析操作符::一起使用

  

<?php

class fly{
    private static $count=0;

    static function show(){
        echo fly::$count;    //使用类名::静态成员访问
        echo self::$count;   //使用关键字self::静态成员访问
    }
}


fly::show();   //访问静态方法  返回 00  self关键字只能在类中使用
?>

  2.self也可以在类的内部方便实例化对象,比如构造方法被私有化之后,就没有办法在类外部实例化对象,此时可以在类内部进行对象实例化

<?php

class fly{

    private function __construct(){     //构造函数被私有化  此类不能被实例化
        
    }

}



new fly();   //报错

?>
<?php

class fly{

    private function __construct(){     //构造函数被私有化  此类不能被实例化
        
    }

    static function instance(){
        return new self();
    }
}



// new fly();   //报错

$a=fly::instance();  

var_dump($a);  //返回的是fly的对象  
// 自己  只有类常量或者静态成员才能使用::范围解析操作符

?>

总结 

  1.self是一种在类内部用来代替类名的关键字

  2.self可以用来在类内部访问静态成员(类常量也可以)

  3.self也可以在类内部用来实例化对象

猜你喜欢

转载自www.cnblogs.com/xiaowie/p/12197051.html