这看起来很简单,但我一直在努力工作。请参考以下两个文件,我试图使用common.php文件的公共函数并在login.php中继承DBConnection类,但它似乎没有工作,得到错误代码'500'(内部服务器错误)。如果我将所有common.php内容放在login.php中它只是工作正常,但我想在许多类中使用DBConnection类和公共函数,所以要开始使这个工作。有人可以帮忙吗?
的common.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();
}
}
?>
的login.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();
?>
[编辑]
我使login.php最简单。当我“扩展DBConnection”时,如果我删除它有效,它会给我错误!
<?php
include 'common.php';
class UserAPI extends DBConnection {
function login() {
echo "OK";
return true;
}
}
$api = new UserAPI;
$api-> login();
?>
答案 0 :(得分:1)
如果函数不是类的一部分,则不能将函数声明为“public”。这将触发致命的PHP语法错误。
解决方案:将这些函数包装在类中,并使它们保持静态。
或删除可见性修饰符“public”。
答案 1 :(得分:0)
我将您的代码复制到我的本地并运行它,它可以工作。
也许你的数据库有问题。
如何评论$this->db = new mysqli('xxx', 'xxx', 'xxx', 'xxx');
相关代码。