访问静态定义表属性

时间:2015-08-09 10:13:54

标签: php oop

我在OOP上非常糟糕,我无法解决这个已经给出的继承代码。

这是通用Model类的一部分;

abstract class Model
{  
  protected static $_tableName  = false;
  protected static $_itemName   = false;

  public static function tableName()
  {
    return static::$_tableName;
  }

  public static function itemName()
  {
    return static::$_itemName;
  }

如何在我创建的中设置表名?

class Payments extends Model {

  //public $_tableName;  

  public function __construct()
  {
    $this->$_tableName  = 'payments'; //line 13
  }

}

当我没有将其设置为参数时,我收到错误Undefined variable: _tableName in /var/www/html/lib/Local/Models/Payments.php on line 13。我做错误Cannot redeclare static XXX\Model::$_tableName

更新

当我尝试在这个抽象模型中使用find方法时,它没有设置tableName;

public static function find($idOrWhere = false, $params = array(), $limit = false)
{
    $sql    = "SELECT * FROM " . static::tableName();

我现在不知道如何设置。它只是忽略了我在课堂上的内容。

2 个答案:

答案 0 :(得分:1)

访问类属性时必须删除$

class Payments extends Model 
{
    public function __construct() 
    {
        $this->_tableName  = 'payments';
    }
}

确实这很烦人,但这就是php语法的工作方式。

答案 1 :(得分:0)

使用static类,您需要使用self关键字初始化类中的属性:

class Foo {
  static $bar;
}
Foo::$bar = array(…);

class Foo {
  private static $bar;
  static function init()
  {
    self::$bar = array(…);
  }
}
Foo::init();