为什么我的PHP类是静态的?

时间:2011-07-31 20:15:40

标签: php

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
}

2 个答案:

答案 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