self 代表當下的自己class(方法當下的class)
self
代表 get_class()
,static
代表 get_called_class
get_class()与上面一样,都是获取当前的类名
get_called_class()获取当前主调类的类名
---
class a{
static function get_static(){
return new static();
}
static function get_self(){
return new self();
}
}
class b extends a{
}
echo get_class(b::get_static()); 印出b因為是從b類繼承的a調的方法,static就是一個類別呼叫到別的類別,要取得呼叫別人類別的類別
self指自己(方法所存在某類別)的類別
----
self:: 的限制 ¶
使用 self:: 或者 __CLASS__ 对当前类的静态引用,取决于定义当前方法所在的类:
Example #1 self:: 用法
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
self::who();
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test();
?>
以上例程会输出:
A
-
---
MVC框架中,涉及到单例时很好用,一般在基类中
public static function getInstance() { $class_name = get_called_class(); if (isset(self::$instance[$class_name])) { return self::$instance[$class_name]; } self::$instance[$class_name] = new $class_name; return self::$instance[$class_name]; }
---
<?php
class A {
public static function foo() {
static::who();
}
public static function who() {
echo __CLASS__."\n";
}
}
class B extends A {
public static function test() {
A::foo();
parent::foo();
self::foo();
}
public static function who() {
echo __CLASS__."\n";
}
}
class C extends B {
public static function who() {
echo __CLASS__."\n";
}
}
C::test();
?>
RESULT:a,c,c
---
static 和 self 一样,都是指向类,一般都用来访问类中的静态变量和静态方法,但是又有一些不一样,具体来讲:self 写在哪个类里,实际调用的就是这个类;static 则是写在父类里,然后通过子类用到了这个 static,这个 static 指向的是这个子类,官方称之为 后期静态绑定
留言列表