[英]How do I declare a static variable in a PHP class but define it in a class which extends the base class?
我有一個DatabaseObject類,它定義了select,insert,update和delete方法。 該類的目的是將MySQL數據庫中的行子集表示為PHP對象。 構造函數調用MySQL的SELECT命令,析構函數調用DELETE命令(除非我不這樣做)。
這是我的DatabaseObject類:
class DatabaseObject {
protected $table;
protected $index_field;
private $data;
function __construct($id) {
//MySQL SELECT and assign resource to data
}
function __destruct() {
//MySQL UPDATE
}
public function insert($data) {
global $db; //Database Class for using MySQL
$fields = array();
$values = array();
foreach ($data as $field => $value) {
$fields[] = "`".$field."`";
$values[] = "'".$db->escape($value)."'";
}
$sql = "INSERT INTO ".$this->table." (".join(', ', $fields).") VALUES (".join(', ', $values).")";
if($db->query($sql)) {
return $db->insertID();
} else {
return false;
}
}
//More methods; update(), delete(), select()
}
當我想訪問特定的表時,我擴展了DatabaseObject類。 例如,我的User類用於我的用戶表。 這里是:
class User extends Object {
public static $anonymous_data = array('user_id' => 0, 'user_level' => ANONYMOUS, 'username' => 'Anonymous');
function __construct($user_id = NULL) {
global $db;
$this->db = $db;
$this->table = USER_TABLE;
$this->index_field = 'user_id';
parent::__construct($user_id);
}
function __destruct() {
parent::__destruct();
}
//Other user methods; login(), logout() etc.
}
現在,我希望能夠從用戶類調用insert方法,而無需實例化User類。 我很確定,我必須讓它靜止。 如何使insert方法保持靜態,但仍然允許它使用擴展類中定義的表?
換句話說,我希望能夠做到這一點:
User::insert($data); //INSERT into user table
AnotherClass::insert($data); //INSERT into another table
...沒有實例化任何一個類。
<?php
class Foo {
public static $anonymous_data = array();
public static function aStaticMethod() {
self::$anonymous_data = array(key, value);
foreach (self::$anonymous_data as $key => $value) {
echo "$key => $value";
}
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // As of PHP 5.3.0
?>
對於靜態方法。 但請注意,靜態變量不能以這種方式訪問。 在這里閱讀有關此示例和靜態關鍵字的更多信息: PHP.net
更新:使用self
而不是$this->
示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.