这看起来很简单,但我一直在努力工作。请参考以下两个文件,我正在尝试使用 common.php 文件的公共函数并在登录.php中继承 DBConnection 类,但它似乎不起作用,得到错误代码"500"(内部服务器错误)。如果我把所有常见.php的东西都放在登录中.php它就可以正常工作,但我想在许多类中使用 DBConnection 类和公共函数,以便让它工作。有人可以帮忙吗?
常见.php
<?php
function getStatusCodeMessage($status) {
$codes = Array(
100 => 'Continue',
101 => 'Switching Protocols',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
306 => '(Unused)',
307 => 'Temporary Redirect',
400 => 'Bad Request',
401 => 'Unauthorized',
402 => 'Payment Required',
403 => 'Forbidden',
404 => 'Not Found',
405 => 'Method Not Allowed',
406 => 'Not Acceptable',
407 => 'Proxy Authentication Required',
408 => 'Request Timeout',
409 => 'Conflict',
410 => 'Gone',
411 => 'Length Required',
412 => 'Precondition Failed',
413 => 'Request Entity Too Large',
414 => 'Request-URI Too Long',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported'
);
return (isset($codes[$status])) ? $codes[$status] : '';
}
// Helper method to send a HTTP response code/message
function sendResponse($status = 200, $body = '', $content_type = 'text/html') {
$status_header = 'HTTP/1.1 ' . $status . ' ' . getStatusCodeMessage($status);
header($status_header);
header('Content-type: ' . $content_type);
echo $body;
}
class DBConnection
{
protected $db;
// Constructor - open DB connection
function __construct()
{
$this->db = new mysqli('xxx', 'xxx', 'xxx', 'xxx');
$this->db->autocommit(FALSE);
}
// Destructor - close DB connection
function __destruct()
{
$this->db->close();
}
}
?>
登录.php
<?php
include 'common.php';
class UserAPI extends DBConnection {
function login() {
// Check for required parameters
if (isset($_POST["username"]) && isset($_POST["password"])) {
// Put parameters into local variables
$username = $_POST["username"];
$password = $_POST["password"];
// Look up code in database
$stmt = $this->db->prepare('SELECT user_username, user_password FROM User WHERE user_username=?');
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->bind_result($existingUsername, $existingPassword);
while ($stmt->fetch()) {
break;
}
$stmt->close();
// Bail if Email exist
if ($existingUsername && $password == $existingPassword) {
$result = array(
"success" => 1,
);
sendResponse(200, json_encode($result));
return true;
}
sendResponse(400, 'Invalid Username or Password. Please try again.');
return false;
}
sendResponse(400, 'Invalid request');
return false;
}
}
$api = new UserAPI;
$api-> login();
?>
[编辑]
我让登录.php最简单的。当我有"扩展DBConnection"时,它会给我错误,如果我删除它就可以了!
<?php
include 'common.php';
class UserAPI extends DBConnection {
function login() {
echo "OK";
return true;
}
}
$api = new UserAPI;
$api-> login();
?>
如果函数不是类的一部分,则不能将函数声明为"public"。这将触发致命的 PHP 语法错误。
解决方案:将这些函数包装在类中,并使它们成为静态函数。
或者删除可见性修饰符"公共"。
我将您的代码复制到我的本地并运行它,它可以工作。
也许您的数据库有问题。
你怎么注释掉$this->db = new mysqli('xxx', 'xxx', 'xxx', 'xxx');
相关的代码。