@flammerman
Web Developer / И фронт и сервер

Не могу разобраться почему не работает namespace или use?

Всем привет, очень нужна помощь гуру пхп.

Структура каталога приложения clip2net.com/s/3MfKbng
автолоадер:
spl_autoload_register(function($class_name) {
        $file = str_replace('\\', '/', realpath(dirname(__FILE__)) . '/' . $class_name . '.php');
        include_once($file);     
    });


Класс Parser
<?php

namespace core;
use vendor\Curl\Curl;

class Parser {   
    
    public $url;
    public $query = array();
    public $host = NULL;
    public $referer = NULL;    
    public $errors = array();
    public $html;
    public $blacklist;

    function __construct($url,$options = array()) 
    {
        $this->url = $url;
        foreach($options as $name => $value) {
            $this->{$name} = $value; 
        }
        $this->_init();                             
    }
      
    public function request() 
    {
        $curl = new Curl();
    }


Вызов:

use core\Parser;
            $parser = new Parser($url);


Запутался я как работают пространства имен. Вылетает ошибка
Fatal error: Class 'vendor\Curl\Curl' not found in D:\xampp\htdocs\parser\panel\core\Parser.php on line 32

Физически все файлы на месте. Файл Класса Parser подключается, инициализируется, но как только доходит до использования класса curl вылетает ошибка. Суть в том что каким образом обьявить дополнительный класс через пространиства имен? Поидее все логично класс Parser находится в namespace Core, далее "use vendor\Curl\Curl;" - на сколько я понял это позволяет подключить дополнительный класс Curl, который может находится вообще в другом месте, как вспомогательный, что и надо. Но далее класс не найден, а файл вроде как подключается с ним. В общем я запутался.

Класс Curl clip2net.com/s/3MfKVHy - тоже в норме. Он работает если тупо все инклюдами подключать.
  • Вопрос задан
  • 1030 просмотров
Пригласить эксперта
Ответы на вопрос 1
@AlexndrNovikov
Solution Architect in Spiral Scout
Ну так у Curl namespace не vendor\Curl\ , a просто Curl; Заменить на
namespace vendor\Curl;
и попробовать снова

Хотя в 2017 году стыдно не использовать composer autoloader
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы