1

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

4

2 回答 2

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 调用或其他任何东西。

于 2013-07-29T18:15:34.513 回答
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 的一个优点,您将在一个类中获得所有扩展功能,其中包含您可能想到的所有方法和受保护/私有属性。

希望这是有道理的:)

于 2013-07-29T19:30:56.153 回答