从ID确定正确对象类型的最优算法

时间:2012-10-25 11:56:03

标签: php mysql algorithm

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

人员ID的一个例子是PRS001。

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

人员是一张容纳所有人的桌子;建筑物是一张容纳所有建筑物的桌子。对象包含所有人和所有建筑物。

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

我可以这样做:

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

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

2 个答案:

答案 0 :(得分:1)

你在这里制造一个基本的设计缺陷。 person <{1}},building <{1}}。

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

此外,您正在使用密钥获取有关记录的信息。这不是键假设工作的方式。键唯一地标识记录,没有意义。

更糟糕的是,你已经有2张桌了。那么为什么不实例化人员表中的人物对象,以及建筑物表格中的建筑物对象。 PDO can instantiate这些对象在获取时自动生成。

示例:

building

从人员表中提取行时。

答案 1 :(得分:-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;
    }
}