【发布时间】:2017-04-17 15:11:19
【问题描述】:
我想要扩展一个基类,但出现了一些错误:
致命错误:在 'Api\Services\Base' 中找不到类 /var/www/html/Api/Services/Example.php 第 7 行
我搜索了拼写错误,尝试使用完全限定名称,将抽象类设为空或将其定义为简单类;这些都没有帮助。 使用 "require" 而不是 "use" 有效,但仍然...
有什么想法(这两个文件在同一个目录中:/var/www/html/Api/Services)?
提前谢谢...
<?php
// Base.php
namespace Api\Services;
use Api\Classes\ErrorHandler;
use Api\Classes\ErrorMessage;
abstract class Base
{
public $data = null;
public function getData()
{
return $this->data;
}
public function setData($data = null)
{
$this->data = $data;
}
}
?>
<?php
// Example.php
namespace Api\Services;
use Api\Services\Base;
class Example extends Base
{
public $request = array();
public function __construct($request = array())
{
$this->request = $request;
}
}
?>
【问题讨论】:
-
在女巫点是
autoloader设置?而且你不需要use Api\Services\Base;,因为你在同一个命名空间Api\Services。 -
注意“require”的作用不像“use”。 require 加载一个真实的文件,
use只定义一个类的完整命名空间名称。你知道这是做什么的吗:use Api\Services\Base as MyBase;?? -
没有自动加载器。也许这就是问题所在(我是 OOP/PHP 新手)?
-
这就是错误。阅读此处php-fig.org/psr/psr-4 和php-fig.org/psr/psr-4/examples 并创建一个。
-
或者只是将带有
include_once('Base.php')的文件包含在Example.php的use行之后。比它在没有自动加载器的情况下工作。但我觉得你应该多读一些关于命名空间、类和自动加载的内容。
标签: php class oop exception extends