后期静态绑定

编程

类中的静态成员是不需要对象而使用类名直接访问的

eg:类名::静态成员属性名,类名::静态成员方法名()

 中类的成员方法中使用self::静态成员属性名/方法名()

 

attention: 在静态方法中只能访问静态成员,因为非静态的成员必须通过对象的引用才能访问$this。

在传统的继承关系中,$this可以动态地与当前调用对象进行绑定 ,但是中静态上下文中就是另外一回事类。

static:: 在处理静态方法时与 $this 是不同的。 $this-> 会遵循继承规则,但是 static:: 不会,它可以与静态成员的调用类进行绑定。

<?php

abstract class createInstance

{

}

class User extends createInstance

{

//创建当前类的实例

public static function create() :self

{

return new self();

}

}

class Product extends createInstance

{

//创建当前类的实例

public static function create()

{

return new self();

}

}

//生成User的实例,使用类名调用类中的静态成员方法

$user = User::create();

var_dump($user);//结果:object(User)#1 (0) { }

为了减少代码的冗余

<?php

abstract class createInstance

{

//创建当前类的实例

public static function create() :self

{

//self总是与当前定义该方法的类绑定,并不能和调用类绑定

//定义类:createInstance

//调用类:User Product

// return new self();

//解决方案:将类的调用与类的调用完全分离,使用static进行后期静态绑定, 可以与当前方法的调用类进行绑定

return new static();

}

}

class User extends createInstance

{

}

class Product extends createInstance

{

}

//生成User的实例,使用类名调用类中的静态成员方法

$user = User::create();

var_dump($user);//结果:object(User)#1 (0) { }

//生成Product的实例,使用类名调用类中的静态成员方法

$Product = Product::create();

var_dump($Product);//结果:object(Product)#1 (0) { }

 

以上是 后期静态绑定 的全部内容, 来源链接: utcz.com/z/518969.html

回到顶部