【问题标题】:Can't extend abstract PHP class无法扩展抽象 PHP 类
【发布时间】: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-4php-fig.org/psr/psr-4/examples 并创建一个。
  • 或者只是将带有include_once('Base.php') 的文件包含在Example.phpuse 行之后。比它在没有自动加载器的情况下工作。但我觉得你应该多读一些关于命名空间、类和自动加载的内容。

标签: php class oop exception extends


【解决方案1】:
use Base

而不是

 use Api\Services\Base;

因为您已经在命名空间 Api\Services 中

其实你甚至不用写use语句,你在命名空间里面,你可以直接调用同一个命名空间里面的类而不包括它们(use

【讨论】:

  • 他在同一个命名空间Api\Services,不需要use
猜你喜欢
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
相关资源
最近更新 更多