2015-02-09 76 views
0

的变量变量继承类结合的事情是,假设我们有三个类A,B和C B和C从A我怎么能延迟静态与PHP

<?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

我认为你已经过度复杂的一切。除非你需要将'B :: $ id'分开到'B :: $ id_B',那么定义后者的原因是什么?只需使用'$ id'。 – Marty 2015-02-09 04:01:33

+0

我想写一个数据库类作为A,这样如果我的合作伙伴想要控制数据库,他可以只创建像B和C这样的继承类来CRUD数据库,而无需编写相同的CRUD代码。但事情是数据库中的id名可能与id_student,id_player不同。所以那就要奋斗我。 – 2015-02-09 18:38:15

回答

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

这正是我想要的。谢谢! – 2015-02-09 18:54:10