我有这种情况:
class User extends Database {
public function validateLogin ($email, $password) {
// some code here
}
}
class General {
public function encryptData ($data) {
// some code here
}
}
$password
来自validateLogin
需要使用来自class General
encryptData
函数进行加密,问题是class User
已经扩展/继承class Database
并且PHP不支持多重继承,对吧? 这种情况如何解决?
谢谢
如果您使用的是 PHP 5.4+,则可以使用特征。
例:
trait encryptDataFunctions {
public function encryptData($data) {
// some code here
}
}
然后在您的课堂中使用它:
class General {
use encryptDataFunctions;
}
class User extends Database {
use encryptDataFunctions;
public function validateLogin ($email, $password) {
$encrypted = $this->encryptData($password);
//more code here
}
}
您可以将class General
注入到validateLogin
方法
public function validateLogin ($email, $password, General $General) {
$encPassword = $General->encryptData($password);
}
在基类上使用某种基方法,如下所示:
class Database {
protected function encryptData($data) {
// this is just to give an idea... you could cache the
// General class, rather than create it on each method call
// sky's the limit
$x = new General();
return $x->encryptData($data);
}
}
然后,您可以在子类中使用该工厂方法:
class User extends Database {
public function validateLogin ($email, $password) {
$encrypted = $this->encryptData($password);
}
}
如果需要,您甚至可以覆盖它:
class UnsecuredUser extends Database {
protected function encryptData($data) {
return $data;
}
public function validateLogin ($email, $password) {
$encrypted = $this->encryptData($password);
}
}
您可以尝试将其设置为静态方法,并直接调用它而不实例化 General 对象:
class General {
public static function encryptData ($data) {
// some code here
}
}
class User extends Database {
public function validateLogin ($email, $password) {
$encrypted = 'General::encryptData($password);
//more code here
}
}