Php类唯一数据成员


Php Classes Unique Data Member

我对PHP真的很陌生,我们的老师刚刚教我们C++OOP,我想在PHP上尝试一下。

我正在用我的类创建对象。

class TwitterUser {
    private $twittername;
    public function TwitterUser($a)
    {
        $this->twittername = $a;
        // echo $this->twittername;

    }
}

  $reader = new Spreadsheet_Excel_Reader($target_path);
$veriler = $reader->sheets[0]['cells'];
foreach($veriler as $veri)
{
if(!empty($veri[$sutun]) and $veri[$sutun]!="Twitter")
    {
    $kisiler[] = new TwitterUser(temizle($veri[$sutun]));
    }
}

我想要的是,如果一个对象和$twittername数据成员中的另一个对象有相同的字符串,不要创建新对象。

此任务通常使用某种Model->数据库方法(如Doctrine)来完成,在这种情况下,您可以将模型数据保存到数据库中。数据库表应设计为不允许多个记录使用相同的名称,并且可以在模型类中构建强制执行和错误处理的逻辑。

您可以通过纯PHP实现同样的目的,但它需要以某种方式存储现有实例,因此在创建新实例时,可以检查现有实例的唯一性。

如果用户名是test,您不想添加对象吗?基本上,你不能放弃构造函数。只需添加一个简单的标志,即可只添加一次"测试"用户。

使用您的代码示例:

$testuserexists = false;
foreach($veriler as $veri)
{
    if(!empty($veri[$sutun]) and $veri[$sutun]!="Twitter" && $testuser == false)
    {
        $kisiler[] = new TwitterUser(temizle($veri[$sutun]));
        if ($veri[$sutun] == "Test")
            $testuserexists = true;
    }
}

或者,如果你试图没有重复:

foreach($veriler as $veri)
{
    if(!empty($veri[$sutun]) and $veri[$sutun]!="Twitter" && !isset($kisiler[$veri[$sutun]]))
    {
        $kisiler[$veri[$sutun]] = new TwitterUser(temizle($veri[$sutun]));
    }
}

我不知道temizle函数应该做什么,但基本上你可以将用户名分配为关联数组键,并通过在条件中添加isset()来防止重复。