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

时间:2016-01-14 04:38:11

标签: php

我遇到这种情况:

class User extends Database {

    public function validateLogin ($email, $password) {
       // some code here
    }

}

class General {
    public function encryptData ($data) {
       // some code here
    }
}
需要使用$password中的validateLogin函数对来自encryptData的{​​p> class General进行加密,问题是class User已经扩展/继承class Database PHP不支持多重继承,对吧?如何解决这种情况?

谢谢

4 个答案:

答案 0 :(得分:1)

您可以将validateLogin注入public function validateLogin ($email, $password, General $General) { $encPassword = $General->encryptData($password); } 方法

#printEmilCountDiv, #printEmilCountDiv *{
 list-style-type:none;
  margin:0;padding:0;
}
#printEmilCountDiv ul{display:inline-block;vertical-align:top; border:solid 1px red;}

答案 1 :(得分:1)

在基类上使用某种基本方法,如下所示:

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

如果需要,您甚至可以覆盖它:

<img>

答案 2 :(得分:1)

您可以尝试将其设置为静态方法,并在不实例化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
    }    

}

答案 3 :(得分:1)

如果您使用的是PHP 5.4 +,则可以使用traits

示例:

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