0

假设我有一个对象、人员和建筑物的数据库。

个人 ID 的一个示例是 PRS001。

建筑物 ID 的一个示例是 BUL001。

Persons 是一个包含所有人员的表;Buildings 是一张包含所有建筑物的桌子。对象包含所有人员和所有建筑物。

现在,如果我从 Object 中提取所有数据,我怎么知道它是人还是建筑物?

我可以做这样的事情:

if(start_of_string_is(BUL))
    then it's a building
else if(start_of_string_is(PRS))
    then it's a person

但是,难道没有更简洁、更性感的方式来实现这一结果吗?

4

2 回答 2

1

你在这里制造了一个基本的设计缺陷。Aperson不是a ,并且a不是abuildingbuildingperson

在面向对象的世界中,这些将是不同类型的对象,并且要根据对象的类型检查对象的实例,您将使用InstanceOf

此外,您正在使用密钥来获取有关记录的信息。这不是钥匙应该如何工作的方式。键唯一标识一条记录,没有任何意义。

更糟糕的是,您已经有 2 张桌子。那么为什么不从persons 表实例化一个person 对象,从buildings 表实例化一个建筑对象。PDO 可以在获取时自动实例化这些对象。

例子:

$person = $statement->fetchObject ( 'person' );

从persons表中获取一行时。

于 2012-10-25T12:05:41.327 回答
-1

Goobri 先生,您告诉我该字符串将始终以 3 个字符开头,那么您可以执行以下操作:

// Sample:

$ids = array('BUL001', 'PRS001');

foreach($ids as $id) {
    switch (substr($id, 0, 3)) {
    case 'BUL':
        // it's a building
        break;
    case 'PRS':
        // it's a person
        break;
    default:
        // invalid
        break;
    }
}
于 2012-10-25T13:24:56.707 回答