我如何在继承的 class 中使用 PHP 的可变变量延迟静态绑定
How can I late static binding in inherited class with variable variables of PHP
问题是,假设我们有三个 classes 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。 class A 是一种接口,所以它只知道继承的 class 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;
}
但是没用。那么有谁能帮我解决这个设计吗?
是的,它只是行不通。您要么知道要访问什么变量,要么将其留给个性化代码来执行。例如:
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;
但我建议改用可重载方法,这样可以让您在长 运行 中获得更多控制权。 "Interfaces" 最好由可调用函数定义,而不是变量名。静态地做这一切是否是一个好主意是一个不同的讨论。
问题是,假设我们有三个 classes 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。 class A 是一种接口,所以它只知道继承的 class 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;
}
但是没用。那么有谁能帮我解决这个设计吗?
是的,它只是行不通。您要么知道要访问什么变量,要么将其留给个性化代码来执行。例如:
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;
但我建议改用可重载方法,这样可以让您在长 运行 中获得更多控制权。 "Interfaces" 最好由可调用函数定义,而不是变量名。静态地做这一切是否是一个好主意是一个不同的讨论。