我在OOP真的很糟糕,我无法解决这个我已经给出的继承代码。访问静态定义表属性
这是泛型模型类的一部分;
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
。
UPDATE
当我尝试使用find
方法与此抽象模型,它不设置表名;
public static function find($idOrWhere = false, $params = array(), $limit = false)
{
$sql = "SELECT * FROM " . static::tableName();
现在我不知道如何设置。它只是忽略了我在班上放置的东西。
感谢。尽管如此,仍然无法弄清楚如何在他的一种方法中使用它。你能看看我的更新吗? – mikelovelyuk
好的,如果你将方法声明为“static”,那么情况就不同了,因为如果没有实际的对象,你显然不能在方法中使用'$ this'。这实际上会产生一个错误。但是这个问题早已存在:在构造函数中设置表名是没有意义的,因为构造函数是在创建对象时执行的。当你创建一个对象并使用构造函数将表名存储在那个对象中时,那么这些方法应该不是静态的,因为它们不会指向那个对象!我的建议:使用一个对象,不要将这些方法声明为静态。 – arkascha