我在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