PHP致命错误:加载URL时找不到类

时间:2014-10-19 16:06:46

标签: php

我正在编写的网络服务中有一个奇怪的错误。 当我加载特定网址时,我同时获得了成功和错误?

这就是我在index.php中的内容:

<?php
require_once 'functions/lib.php';
require_once 'core/init.php';

// Ask for request URL that was submitted and define scriptPath. Explode content of REQUEST URL to evaluate validity.
$requestURL = (($_SERVER['REQUEST_URI'] != "") ? $_SERVER['REQUEST_URI'] : $_SERVER['REDIRECT_URL']);
$scriptPath = dirname($_SERVER['PHP_SELF']);
$requestURL = str_replace($scriptPath, "", $requestURL);
$requestParts = explode("/", $requestURL);
// Check for valid api version
$validAPIVersions = array("v1");
$apiVersion = $requestParts[1];

// If API Version not in valid API array return 404, else OK.
if (!in_array($apiVersion, $validAPIVersions)) {
    httpResponseCode(404);
    echo $GLOBALS['http_response_code'];
    echo "<br>" . "API Version not valid";
    exit();
}

// Check for valid API endpoint
$validEndPoints = array("tickets");
$endPoint = $requestParts[2];
if (!in_array($endPoint, $validEndPoints)) {
    httpResponseCode(404);
    echo $GLOBALS['http_response_code'];
    echo "<br>" . "Endpoint not valid";
    exit();
}

// get the endpoint class name
$endPoint = ucfirst(strtolower($endPoint));
$classFilePath = "$apiVersion/$endPoint.php";

if (!file_exists($classFilePath)) {
    httpResponseCode(404);
    echo $GLOBALS['http_response_code'];
    exit();
}

// load endpoint class and make an instance
try {
    require_once($classFilePath);
    $instance = new $endPoint($requestParts);
} catch (Exception $e) {
    httpResponseCode(500);
    echo $GLOBALS['http_response_code'];
    exit();
}

这是相应的“Tickets.php”

<?php
echo "OK";
?>

在我的index.php的最后两行中,我正在加载特定的类(在URL中命名)。出于测试目的,我在此文件中有一个“echo”OK。这是我加载我需要的URL时的结果:

http://api.medifaktor.de/v1/tickets

OK
Fatal error: Class 'Tickets' not found in /usr/www/users/kontug/api.medifaktor.de/webservice/index.php on line 45

我得到了我期待的OK和Class Tickets的错误,这是找不到的。第45行是

$instance = new $endPoint($requestParts);

有人可以帮助我吗?

最佳

塞巴斯蒂安

2 个答案:

答案 0 :(得分:3)

问题是你没有上课&#34;门票&#34;定义。加载tickets.php文件后,您尝试实例化一个类。加载文件与定义类不同。在tickets.php(或其他一些包含的文件)中,您需要定义类,如下所示:

class Tickets
{
    // some properties here
    private $endpoint;

    // some methods here
    public function __construct($endpoint)
    {
        $this->endpoint = $endpoint;
    }
}

如果您不确定如何使用PHP构建类,请阅读classes手册中的部分。

更新:我在PHP5 +版本的类中添加了一些示例代码。

答案 1 :(得分:1)

尝试以下测试,在'ticket.php'文件中添加:

class Ticket {

    public function __construct()
    {
        echo 'testing';
    }

}

然后确保您namespacerequire该文件。