hier ist mein Getter:Warum verwendet meine Getter Magic-Methode eine Klasseninstanz als Index?
public function __get($field)
{
if ($field == 'userId'):
return $this->uid;
else:
return $this->fields[$field];
endif;
}
hier ist mein Konstruktor
public function __construct()
{
$this->uid = null;
$this->fields = array(
'username' => '',
'password' => '',
'firstname' => '',
'lastname' => '',
'email' => '',
'is_active' => false
);
$this->session = Session::Instance();
$this->profiler = new Profiler();
$this->encrypt = new Encrypt();
}
Jedesmal, wenn ich auf diese Funktion zugreifen:
private function handle_pass($password, $username=null, $encrypt=true)
{
if ($encrypt) :
return $this->encrypt->encode($password);
else:
$query = ORM::factory('user');
$result = $query
->select('password')
->where('username', $username)
->find();
$compare_pass = $this->encrypt->decode($password);
return ($compare_pass === $result->password);
endif;
}
Ich erhalte diesen Fehler
application/libraries/User.php: Undefined index: encrypt // this is the error message
application/libraries/User.php:User->__get(encrypt) // this is the last method executed
Lassen Sie uns sagen, ich habe eine Verschlüsselungsklasse, die ich von dieser Klasse anrufen möchte. Wie mache ich das? Ich habe versucht, $ this-> encrypt = new Encrypt, aber ich denke, die Klasse interpretiert es als eines seiner Attribute. –
Es ist klar: Die 'Verschlüsseln' * Klasse * ist hier irrelevant. Das Problem ist die "encrypt" (korrekt kleingeschriebene) Instanzvariable. Sie müssen diese Eigenschaft entweder als 'public $ encrypt;' oder 'protected $ encrypt; 'deklarieren (je nachdem, welche Sichtbarkeit Sie haben möchten). – VoteyDisciple
$ this-> encrypt = new Encrypt() ist absolut gültig. Die Eigenschaft encrypt sollte eine Instanz von Encrypt sein. –