1
私はget_object_varsがphp.netでどのように動作するかを見ました。OOP PHP - get_object_vars
私のOOPスクリプトではうまくいかないことがあります。
DatabaseObjectを拡張user.phpファイルがあります:作成()関数は、ユーザーが公共のvars内部に格納された値を取る必要があります
<?php
require_once('database.php');
class DatabaseObject {
public static function findAll(){
global $database;
$calledClass = get_called_class();
return self::findBySQL("SELECT * FROM ".static::$tableName."");
}
public static function findByID($id){
global $database;
$calledClass = get_called_class();
$result_array = self::findBySQL("SELECT * FROM ".static::$tableName." WHERE ".static::$tableID." = {$id}");
return !empty($result_array) ? array_shift($result_array) : false;
}
public static function findBySQL($sql){
global $database;
$result_set = $database->query($sql);
$object_array = array();
while ($row = $database->fetchArray($result_set)) {
$object_array[] = self::instantiate($row);
}
return $object_array;
}
private static function instantiate($record){
$calledClass = get_called_class();
$object = new $calledClass;
foreach($record as $attribute=>$value){
if($object->has_attribute($attribute)) {
$object->$attribute = $value;
}
}
return $object;
}
private function has_attribute($attribute) {
$object_vars = $this->attributes();
return array_key_exists($attribute, $object_vars);
}
public function attributes(){
return get_object_vars($this);
}
protected function cleanAttributes(){
global $database;
$cleanAttributes = array();
foreach($this->attributes() as $key => $value) {
$cleanAttributes[$key] = $database->escapeValue($value);
}
return $cleanAttributes;
}
public function save() {
return(isset($this->id)) ? $this->update() : $this->create();
}
protected function create() {
global $database;
//$calledClass = get_called_class();
//$class = new $calledClass;
$attributes = $this->cleanAttributes();
$sql = "INSERT INTO ".static::$tableName." (";
$sql .= join(", ", array_keys($attributes));
$sql .= ") VALUES ('";
$sql .= join("', '", array_keys($attributes));
$sql .= "')";
if($database->query($sql)) {
$this->id = $database->insert_id();
return true;
}else {
return false;
}
}
}
:
<?php
require_once('database.php');
class User extends DatabaseObject {
protected static $tableName = 'users';
protected static $tableID = 'id';
public $id;
public $username;
public $password;
public $firstname;
public $lastname;
}
?>
、ここではdatabaseobject.phpそのものだが、 .phpを作成してDBに格納します。今私の価値の価値として、私は値usernameを持っている$ usernameのように属性自体を得ています。
どこが間違っていますか?私はOOP PHPに初心者です...:P
あなたの助けを借りて今日私の問題を解決し、私が間違っていた場所を理解することができました。おそらくこの時間に私を救うことができます... – mrGott
あなたの他の投稿と同様にひどいデザインに見えます。重複を作成せず、静的変数とインスタンス変数について学んでください。 – Macmade
ひどい質問のタイトルも。 –