PHP新手。
我创建了一个简单的类:
class User
{
private $name;
private $password;
private $email;
public function getName()
{
return $this->name;
}
public function setName($value)
{
$this->name = $value;
}
public function setPassword($value)
{
$this->password = $value;
}
public function setEmail($value)
{
$this->email = $value;
}
public function getEmail()
{
return $this->email;
}
}
我创建了这个类的2个实例,并将第一个实例存储到一个数组中。然后我检查数组中是否存在第二个实例(我没有添加到数组中)。出于某种原因,in_array()始终返回'1'或true。
事实证明,数组现在以某种方式包含我没有明确添加到数组的第二个用户对象。好像User的属性表现得像静态类成员。我错过了什么?
$user = new User();
$user::setName('Nick');
$user::setEmail('bbbb@gmail.com');
$user::setPassword('bbbbb');
$somethingelse = new User();
$somethingelse::setName('Mindy');
$somethingelse::setEmail('a@gmail.com');
$somethingelse::setPassword('aaaa');
$arr = array('users'=>$user); //add first object to array
echo in_array($somethingelse,$arr); //check if second object is in array
echo $arr['users']::getName(); //Prints mindy
}
答案 0 :(得分:4)
因为您正在使用命名空间解析运算符::
,而不是实例解除引用运算符->
。第一个在类上调用方法,第二个在实例上调用。如果您打开E_STRICT
错误报告(您应该这样做!),您会看到一些关于静态调用实例方法的警告。
要解决此问题,请使用$user->setName('Nick');
(在其他地方进行类似更改)。
答案 1 :(得分:2)
使用
->
而不是
::
简而言之,它用于访问类的Static或Constant成员。
会导致
$user = new User();
$user->setName('Nick');
$user->setEmail('bbbb@gmail.com');
$user->setPassword('bbbbb');
$somethingelse = new User();
$somethingelse->setName('Mindy');
$somethingelse->setEmail('a@gmail.com');
$somethingelse->setPassword('aaaa');
$arr = array('users'=>$user); //add first object to array
echo in_array($somethingelse,$arr); //check if second object is in array
echo $arr['users']->getName(); //Prints mindy