我有一个事件类,用于将数据插入/更新到我的数据库中。有没有一种方法可以从 db_fields 数组创建公共变量,这样我就不必复制数据?

这是我目前有效的结构......

class event{
    protected static $table_name='tName';
    protected static $db_fields = array('field1','field2','field3','field4','field5');

    public $field1;
    public $field2;
    public $field3;
    public $field4;
    public $field5;
}

我想要有这样的东西..

class event{
    protected static $table_name='tName';
    protected static $db_fields = array('field1','field2','field3','field4','field5');

    function __construct() {
        create_public_vars_here($db_fields);
    }

}

谢谢!

有帮助吗?

解决方案

您可以尝试以下操作:

class event{

    protected static $table_name='tName';
    protected static $db_fields = array('field1','field2','field3','field4','field5');

    function __construct() {
        foreach (self::$db_fields as $var) {
            $this->$var = $whateverDefaultValue;
        }
        // After the foreach loop, you'll have a bunch of properties of this object with the variable names being the string values of the $db_fiels.
        // For example, you'll have $field1, $field2, etc and they will be loaded with the value $whateverDefaultValue (probably want to set it to null).
    }

}
.

其他提示

您可以使用魔术设置器/获取器:

class event{

    protected static $table_name='tName';
    protected static $db_fields = array('field1','field2','field3','field4','field5');

    public function __get($key)
    {

        if(!in_array($key, static::$db_fields))
            throw new Exception( $key . " doesn't exist.");

        return $this -> $key;

    }

    public function __set($key, $value)
    {

        if(!in_array($key, static::$db_fields))
            throw new Exception( $key . " doesn't exist.");

        $this -> $key = $value;

    }   

}

这样你就可以确保不会达到列表之外的值:

$event -> field1 = 'hello';  // --> OK
$event -> field17 = 'hello'; // --> Exception: field17 doesn't exist

echo $event -> field1;  // --> OK
echo $event -> field17; // --> Exception: field17 doesn't exist

至于在代码中明确的公共变量声明,只要您不必迭代对象,就不需要 - 但在这种情况下,您将实现 Iterator 基于您的静态字段的界面。

使用突变分子:

class event{
  protected static $table_name='tName';
  protected static $db_fields = array('field1','field2','field3','field4','field5');

  function getVars($var) {
    if(!in_arrary($this->db_fields[$var])) {
      return false;
    } else {
      return $this->db_fields[$var];
    }
  }
}
.

然后您可以如下访问它:

$eventObject->getVars('field3');
.

或者,如果您没有从类中创建对象:

event::getVars('field3');
.

编辑:从复杂的东西的精神使您没有违规,代码添加了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top