私はすべての典型的なデータベースメソッド(Crudなど)に対してdatabaseObjectというクラスを使用するPHPクラス定義を持っています。私は最近、各テーブルのidカラムがもはや "id"と呼ばれることなく、テーブルが+ idを保持している(例:Companiesテーブルのidが "companyId")ようにデータベース構造を変更しました。そこで、私はdatabaseObjectを拡張するクラスで、そのテーブルのidの名前を保持する$ table_idという静的変数をインクルードします。私は今、そのクラス変数を呼び出す必要がある状況に遭遇しました。コードの例を以下に示します。このコードはPHP 5.3で実行されています。変数を使ってPHPクラス変数を呼び出す
//databaseObject Delete Method;
public function delete() {
global $database;
//DELETE FROM table WHERE condition LIMIT 1
//escape all values to prevent SQL injection
// - use LIMIT 1
$sql = "DELETE FROM ".static::$table_name;
$sql .= " WHERE ".static::$table_id."=". $database->escape_value($this->id);
$sql .= " LIMIT 1";
$database->query($sql);
return ($database->affected_rows() ==1) ? true : false;
}
//Actual Class that creates the issue
require_once(LIB_PATH.DS.'database.php');
require_once(LIB_PATH.DS.'databaseobject.php');
class Contact extends DatabaseObject {
protected static $table_name="contacts";
protected static $table_id="contactId";
protected static $db_fields = array('contactId','companyId','contactName', 'phone', 'fax', 'email');
public $contactId;
public $companyId;
public $contactName;
public $phone;
public $fax;
public $email;
}
//Code that calls the method
$contact = Contact::find_by_id($_GET['contactId']);
if($contact && $contact->delete()) {
$session->message("The Contact was deleted.");
log_action('Contact Deleted', "Contact was deleted by User ID {$session->id}");
redirect_to("../companies/viewCompany.php?companyId={$contact->companyId}");
} else {
$session->message("The Contact could not be deleted");
redirect_to('../companies/listCompanies.php');
}
自己::についてはどうしますか? – ComFreek
私はそれが問題だとは思わない。彼はすでに静的なメンバーを持っていたので、私は彼がすでにそれらと一緒に作業する方法を知っていると思う。私は今、$ table_idにある名前を持つクラスフィールドにアクセスする方法を尋ねています。それは意味をなさないでしょう。 – AlexanderMP