继承类中的 PHP 函数需要来自另一个类的函数


PHP Function from Inherited Class Requires Function from Another Class

我有这种情况:

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
    }    
}