用PHP-OOP管理数据库

用PHP-OOP管理数据库,php,mysql,database,class,oop,Php,Mysql,Database,Class,Oop,这是我第一次尝试OOP,我的英语不太熟练,所以很抱歉出错 我想在我的数据库中管理一个具有许多属性的人员列表,我必须提取所有记录或保存单个记录。我试图创建一个包含所有属性的类,但我不知道如何初始化单个对象,因为我认为创建一个包含这么多参数的构造函数不是正确的方法。我需要一个建议。非常感谢 弗朗西斯科 编辑:我应该做什么的一个例子 class Person { var $id=NULL; var $name; var $lastname; var $cf; v

这是我第一次尝试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对象。

更好的方法是使用映射器

您有一个
Person
对象,还有一个
PersonMapper
对象,它只负责将数据库中的内容映射到Person,反之亦然

所以

因此,您可以这样使用它:

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

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

这使您不必绑定到单个数据源,它可以是数据库、文件、远程API调用或其他任何数据源。

您走的是正确的道路,只需使用PHP5 OOP,PHP4样式已经过时一段时间了,加上PHP5将为您提供更多可以在此处使用的功能

比如:

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

$person_obj = new Person($data);

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

//get name
echo $person_obj->name;
您仍然可以在需要对个人数据执行任何操作的任何位置使用受保护和私有属性和方法,但无论何时将此对象传递到数据库或其他源,都只能看到和使用公共属性、受保护和私有属性以及所有方法保持不变

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


希望这有意义:)

一个构造函数可能处理一百万个“属性”。这是否合理是另一回事。那么,我们在这里讨论了多少“属性”,为什么你认为这是“不正确的方式”?如果你能给我们展示一些你试图实现这个的代码,那么我们回答你的问题会更容易。好的,但是在这种情况下,我可以直接在类person中插入metod(或者不插入?)。我认为问题不在于数据的获取,因为我可以使用fetch($id)这样的方法,其中$id是我的people's表的主键属性的值。我有一个用于注册单人的表单,如何使用通过$\u POST变量传递的数据创建对象?请注意,PHP调用对象的速度相对较慢。因此,如果单个请求可能会导致数百个以上的类实例,那么这种方法可能会非常昂贵。因此,我可以在方法中传递整个$\u POST数组以进行分配,然后使用另一个方法将数据保存到数据库中。现在我有另一个问题:我想用数据库中的所有人填充一系列不同的html表,我应该创建一个对象数组,然后循环它们吗@BenDeMott说,这种操作对于数百条记录来说是非常昂贵的。是的,数组对象然后循环它们,在资源方面可能比数组更昂贵,但这并不重要。为了创建这个用户对象数组考虑工厂专利。你可以用谷歌搜索,网上有很多信息。
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;