我在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();
我现在不知道如何设置。它只是忽略了我在课堂上的内容。
答案 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();