提问人:Xinran Luo 提问时间:2/9/2015 更新时间:2/9/2015 访问量:140
如何使用PHP的变量在继承类中后期进行静态绑定
How can I late static binding in inherited class with variable variables of PHP
问:
问题是,假设我们有三个类 A、B 和 C.B 和 C 继承自 A。
<?php
class A{
public static function update(){
static::$id = 1;
}
}
class B extends A{
public static $id_B;
}
class C extends A{
public static $id_C;
}
A::update();
?>
由于任何原因,B 和 C 中的 id 名称不同。B 是 id_B,C 是id_C。类 A 是一种接口,所以它只知道继承的类 B 和 C 应该有一个变量$id。A 想要将 $id 更新为 1。我想要的是尝试将 $id_B 和 $id_C 更新为 1。我尝试了几种方法,例如设置变量变量,如下所示:
class A{
public static function update(){
static::$$id_name = 1;
}
}
class B extends A{
public static $id_name="id_B";
public static $id_B;
}
但这行不通。那么有人可以帮我解决这个设计吗?
答:
1赞
deceze
2/9/2015
#1
是的,它不是那样工作的。要么您知道要访问哪个变量,要么将其留给个性化代码来执行。例如:
class A {
public static function update(){
static::updateId(1);
}
protected static function updateId($value) {
static::$id = $value;
}
}
class B extends A{
public static $id_B;
protected static function updateId($value) {
static::$id_B = $value;
}
}
class C extends A{
public static $id_C;
protected static function updateId($value) {
static::$id_C = $value;
}
}
您要查找的变量变量的语法是:
static::${static::$id_name} = 1;
但我建议改用可重载的方法,从长远来看,这可以为您提供更多的控制权。“接口”最好由可调用函数定义,而不是变量名称。静态地做这一切是否是一个好主意,这是一个不同的讨论。
评论
0赞
Xinran Luo
2/10/2015
这正是我想要的。谢谢!
上一个:PHP 变量变量请求方法
评论
B::$id
B::$id_B
$id