Некоторые из моих классов имеют конструкторы как в родительском, так и в дочернем классах. Как я могу запустить оба конструктора?
Родительский класс:
include 'c:/wamp/www/mvc/include/connect.php';
class Database
{
protected $mysqli;
protected $exc;
function __construct(mysqli $db)
{
mysqli_set_charset($db,'utf8');
$this->mysqli = $db;
}
<?php
Детский класс: (LoginClass)
<?phpclass Login extends Database {
private $username;
private $password;
function __construct(mysqli $db, $username, $password)
{
parent::__construct($db);
$this->setData($username, $password);
$this->getData();
}
function setData($username, $password)
{
$this->username = $username;
$this->password = $password;
}function getData()
{
$result = $this->mysqli->query("SELECT * FROM anvandare WHERE anvandarnamn = '$this->username;' AND losenord = '$this->password'");
$count = $result->num_rows;
if($count>0)
{
return true;
}
else
{
throw new Exception("Username or Password incorrect. Please try again");
}
}
LoginController.php
<?php
//LoginController
if($_POST)
{
if(isset($_POST['submit']) AND $_POST['submit'] == "login")
{
$username = $_POST['username'];
$password = $_POST['password'];
try
{
include '../model/Login.php';
$login = new Login($db ,$username, $password);
if($login == TRUE)
{
session_start();
$_SESSION['username'] = $username;
header("Location:../index.php");
}
}
catch (Exception $exc)
{
echo $exc->getMessage();
}
}
}
Я пробовал звонить parent::__construct($this->mysqli);
в дочернем конструкторе, но как-то это не сработало.
Это, вероятно, не работает, потому что родительский конструктор требует экземпляр mysqli
быть переданным. Следующая подпись должна работать, хотя:
require_once __DIR__ . '/Database.php';
class Login extends Database
{
function __construct(mysqli $db, $username, $password)
{
parent::__construct($db);
$this->setData($username, $password);
$this->getData();
}
}
Других решений пока нет …