很多站长朋友们都不太清楚php后期绑定,今天小编就来给大家整理php后期绑定,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 PHP代码,能详细解释一下每行的意思么?多谢了 2、 如何理解php中的后期静态绑定 3、 PHP后期静态绑定错误问题,怎么解决 PHP代码,能详细解释一下每行的意思么?多谢了php中类操作有几个关键字,$this, self, static, parent
$this很好区别,就是实例化后的对象,所以不能在静态方法里调用
class testA{
public $name="name";
public static function test() {
//出错! static方法不能使用this
echo $this->name;
}
}
self, static, parent 都是静态调用,后跟 :: 如果是变量,要加$
class testA{
//属性也要定义成静态的,不然也是访问不了的
public static $name="name";
public $mobile="";
public static function test() {
//可以访问
echo static::$name;
//不可访问
echo static::$mobile
}
}
下面说一下三者区别
self 指代当前定义方法所在的类
static 后期静态绑定的类 ( 实际调用中是哪个类,就代表哪个类,不一定是方法定义所在的类 )
parent 这个也好区别,就是当前定义类的父类
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // 后期静态绑定从这里开始
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test();
以上代码,输出 B
因为最后调用是从B 这个类调用的
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
因为调用who时指定了当前类,不管最终从哪里调用,都会调用到A里定义的方法
另外 ,这三个关键字可跟在new 后面,来实例化代表的类,就不用重复写类名,方便维护。
参考:php:后期静态绑定
学php可以多看看官方手册
下面我再简单解释下你发的代码。
你这个应该是thinkphp的model吧,init静态方法是model的初始化方法,是一个静态方法,主要用于勾子处理(事件绑定)。这个调用可以从thinkphp的model类中找到。
一般在定义方法时需要覆盖父类方法,都会调用一下 parent::method() 用于先执行父类的方法,除非特意屏蔽父类初始方法就不调用。
如何理解php中的后期静态绑定使用的保留关键字:
static
定义:
static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。
self与static的区别:
self调用的就是本身代码片段这个类,而static调用的是从堆内存中提取出来,访问的是当前实例化的那个类(即static作用于当前调用的类)
示例一(在静态环境下)
<?phpclass A { public static function who() { echo __CLASS__;
} public static function test() { static::who(); // 后期静态绑定从这里开始
}
}class B extends A { public static function who() { echo __CLASS__;
}
}
B::test();?>输出结果是"B"
PHP后期静态绑定错误问题,怎么解决可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。
self,parent 和 static 这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的。
parent用于调用父类中被覆盖的属性或方法(出现在哪里,就将解析为相应类的父类)。
self用于调用本类中的方法或属性(出现在哪里,就将解析为相应的类;注意与$this区别,$this指向当前实例化的对象)。
当一个子类覆盖其父类中的方法时,PHP 不会调用父类中已被覆盖的方法。是否调用父类的方法取决于子类。
关于php后期绑定的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。