расширенный класс структурного проектирования php не найден - PullRequest
0 голосов
/ 25 декабря 2018

Всякий раз, когда я пытаюсь расширить класс, я получаю

Неустранимая ошибка: класс 'home \ register \ Create' не найден в C: \ xampp \ htdocs \ project \ home \ register \register.php в строке 8

У меня есть 2 класса файлов в одном каталоге, первый абстрактный класс Create:

<?php

namespace home\register;

use home\libs\Tools\Sanitize\Sanitize as sanitize;

abstract class Create
{
    public $sanitize;

    function __construct ()
    {
        $this->sanitize = new sanitize();
        if (isset($_POST)){
            foreach ($_POST as $key => $value){
                if (!empty($_POST["$key"])){
                    $this->$key = $this->sanitize->clean($value);
                }
            }
        }
    }

    abstract function db_query($pdo_db_name, $password, $query, $host = 'localhost');
}

И регистр второго класса, расширяющий Create:

<?php

namespace home\register;

use PDO as pdo;
use home\libs\MainLogger\MainLogger as logger;

class register extends Create //Line 8 Error is thrown when extending the class

Я могу опубликовать весь код, но я сомневаюсь, что проблема там.Я пытался приспособиться к шаблону структурного проектирования, так как считаю его самым аккуратным способом обработки множества классов

1 Ответ

0 голосов
/ 25 декабря 2018

Прямо сейчас

Вам необходимо убедиться, что Create загружен, прежде чем вы сможете расширить его в register.php.Самый простой способ сделать это - использовать require_once, добавив что-то вроде:

require_once(__DIR__ . '/Create.php');

в начало register.php.На данный момент этого должно быть достаточно.

Возможно, позже

Как только вы начнете загружать много классов, вы можете захотеть использовать автозагрузчик .Из моего опыта самый гибкий способ сделать это - преобразовать проект в composer, а затем использовать элемент конфигурации autoload.

Расположение ваших классов (не включая те, которые не показаны в этом вопросе) будет выглядеть примерно так:

src/register/Create.php
src/register/register.php

, и, чтобы соответствовать этому, ваш composer.json будет выглядеть примерно так:

{
    "autoload": {
        "psr-4": {"home\\": "src/"}
    }
}

Затем вы можете сгенерировать автозагрузчик, запустив:

composer dump-autoload

и использовать его в точке входа в ваш проект, добавив:

require_once('vendor/autoload.php');

ИзНа этом этапе вам не нужно будет добавлять отдельные require_once строки для каждого файла, при условии, что вы повторно запустили dump-autoload после добавления новых классов в ваш источник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...