思考:类的内部的静态方法内可能会访问其他静态成员或者类常量,这个时候必须每次使用类名::那么如果类名修改的画岂不是很麻烦?
引入:静态成员或者类常量的访问时必须使用类名进行访问的,不过为了方便类名的更新,减少开发者维护成本,系统引入一个类似$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也可以在类内部用来实例化对象