使用PHP OOP管理数据库

时间:2013-07-29 18:06:38

标签: php mysql database class oop

这是我第一次尝试OOP,而且我不擅长英语,对于错误感到抱歉。

我想管理具有大量属性的数据库中的人员列表,我必须提取所有记录或保存单个记录。我正在尝试创建一个具有所有属性的类,但我不知道如何初始化单个对象,因为我认为创建具有如此多参数的构造函数不是正确的方法。我需要一个建议。非常感谢。

弗朗西斯

编辑:我应该做的一个例子。

class Person {
    var $id=NULL;
    var $name;
    var $lastname;
    var $cf;
    var $address;
    var $number;
    var $city;
    var $cap;
    var $state;
    var $nation;
    var $phone;
    var $fax;
    var $cell;
    var $email;
    var $reg_date;
    var $reg_type;

    function __constructor(... attributes ...){
        ... assignements ...
    }

    function getPerson($id){
        $result=mysql_query("SELECT * FROM .... ");
        if(mysql_num_rows($result)!=1) return false;
        $record = mysql_fetch_assoc($result);
        $this->id=$record['id'];
        $this->name=$record['name'];
        ecc ...
    }
}

我需要在POST模式下使用Web表单发送的数据创建一个Person对象。

2 个答案:

答案 0 :(得分:3)

更好的方法是使用映射器。

你有Person对象,并且你有一个PersonMapper对象,它只负责将数据库中的内容映射到人,反之亦然。

因此...

class Person {
    //All attributes here

    //Setter and getter methods as necessary
}

class PersonMapper {
    public function fetch(Person $person)
    {
         //Contact the database and fetch all the data into $person;
    }
    //Mapping from the database
}

这样你就像这样使用它:

$person = new Person;
$mapper = new PersonMapper;

$mapper->fetch($person); //$person should now hold all of the data in its properties.

这为您提供了不依赖于单个数据源的优势,它可以是数据库,文件,远程API调用等等。

答案 1 :(得分:0)

你走在正确的道路上,只需使用PHP5 OOP,PHP4风格已经过时了一段时间,加上PHP5将为您提供更多可以在这里使用的功能。

像:

class Person {
    public $id=NULL;
    public $name;
    public $lastname;
    public $cf;
    public $address;
    public $number;
    public $city;
    public $cap;
    public $state;
    public $nation;
    public $phone;
    public $fax;
    public $cell;
    public $email;
    public $reg_date;
    public $reg_type;
}

您可以在实例化对象时通过在构造函数中传递对象或数组来设置这些属性。您可以直接设置/获取它们的价值,因为它们是公开的,例如:

$person_obj = new Person($data);

//set name
$person_obj->name = 'Joe';

//get name
echo $person_obj->name;

您仍然可以在需要它们的地方使用受保护和私有属性和方法对您的个人数据执行任何操作,但是无论何时将此对象传递给数据库或其他某些源,只会看到并且可以使用公共属性,受保护的和私有的属性以及所有方法都保持不变。

在某种程度上,您可以将对象视为关联数组,并将公共属性视为关联数组。使用OOP作为一个优点,您将获得一个类中的所有扩展功能,其中包含您可能想到的所有方法和受保护/私有属性。

希望这是有道理的:)