【发布时间】:2014-06-14 09:19:37
【问题描述】:
我是开发面向对象的 PHP 并尝试创建登录系统的新手。因此,我制作了一个索引文件和两个类。在我看来,使用 var_dump(),输出将包含元素状态、用户名等。
但发生的事情是我收到了这个通知:
notice: Undefined variable: connector in C:\xampp\htdocs\1-4-LT3\Concept\Authenticator.php on line 15
Fatal error: Call to a member function connect() on a non-object in C:\xampp\htdocs\1-4-LT3\Concept\Authenticator.php on line 15
对我来说,构造函数似乎不起作用。
我做错了什么?为什么 $connector 变量未定义?
哦,我知道这种方式非常不安全,但我只是想对 OO PHP 有所了解。
index.php 文件:
<?php
include 'Connector.php';
include 'Authenticator.php';
$connector = new Connector('localhost', 'root', '', 'hondsrug_db');
$authenticator = new Authenticator($connector);
$authenticator->login('root', 'admin');
var_dump($authenticator);
?>
connector.php 文件:
<?php
class Connector {
var $mysqli;
var $host;
var $username;
var $password;
var $database;
public function Connector($host, $username, $password, $database){
$this->host = $host;
$this->username = $username;
$this->password = $password;
$this->database = $database;
}
public function query($query){
$result = $mysqli->query($query);
if($result->num_rows > 0){
return $result->fetch_assoc;
} else {
return null;
}
}
public function connect(){
$this->mysqli = new mysqli($host, $username, $password, $database);
}
public function disconnect(){
$mysqli->close();
}
}
?>
还有 Authenticator.php 文件:
<?php
// maakt verbinding met db
// logt in adh van methode
// bepaalt rang, en implementeert hiervoor een getter
class Authenticator {
var $connector;
var $status;
var $username;
var $rank;
public function Authenticator($connector){
$this->connector = $connector;
}
public function login($username, $password){
$connector->connect();
$result = $connector->query('SELECT password, rank FROM users WHERE username = '.$username);
if($result != null){
if($result['password'] == SHA1($password)){
$this->status = true;
$this->username = $username;
$this->rank = $result['rank'];
} else {
$this->status = false;
$this->username = null;
$this->rank = null;
}
} else {
$status = false;
}
$connector->disconnect();
}
public function getRank(){
return $rank;
}
public function getStatus(){
return $status;
}
}
?>
【问题讨论】:
-
只是一个小提示,可能有一天会影响到你。如果您开始使用命名空间并且命名空间的最后一个元素与方法同名,则此方法不会被视为构造函数。所以我建议使用 __construct。
标签: php oop object constructor