我对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()来防止重复。