0

问题是,假设我们有三个类 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;
}

但它不起作用。那么有人可以帮我解决这个设计吗?

4

1 回答 1

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;

但我建议改用可重载的方法,从长远来看,这可以让您有更多的控制权。“接口”最好由可调用函数定义,而不是变量名。开始时是否静态地做这一切是一个好主意,这是一个不同的讨论。

于 2015-02-09T04:35:41.887 回答