Этот урок набрал набрал достаточно большое количество
комментариев и дальнейшее его комментирование отключено.
Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку,
посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали.
Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
Warning: require_once(/var/www/html/php-learn/Sparky-project/www/../src/MyProject\Models\Users\User.php): failed to open stream: No such file or directory in /var/www/html/php-learn/Sparky-project/www/index.php on line 11
Fatal error: require_once(): Failed opening required '/var/www/html/php-learn/Sparky-project/www/../src/MyProject\Models\Users\User.php' (include_path='.:/usr/share/php') in /var/www/html/php-learn/Sparky-project/www/index.php on line 11
Да, всё дело именно в них. Разница в том, что я писал урок под виндой, а там в путях как раз обратные слэши. Ваше решение с использованием str_replace - в самый раз.
Все, обнаружил свой косяк: не поставил тип переменной User для переменной $author в Article.php. Это я так понимаю чтобы автором статьи не мог стать кто-то отличный от User (например кот или пес))
Я правильно понимаю, что мы здесь пишем конструкции вида:
<index.php>
$author = new \MyProject\Models\Users\User('Иван');
$article = new \MyProject\Models\Articles\Article('Заголовок', 'Текст', $author);
для наглядности? В реальной программе с большим количеством кода, лучше использовать псевдонимы и тогда будет меньше таких устрашающе длинных строк:
<?php
use MyProject\Models\Users\User as UserAlias;
use MyProject\Models\Articles\Article as ArticleAlias;
function myAutoLoader(string $className)
{
var_dump($className);
require_once __DIR__ . '/../src/' . $className . '.php';
}
spl_autoload_register('myAutoLoader');
$author = new UserAlias('Иван');
$article = new ArticleAlias('Заголовок', 'Текст', $author);
Решение c заменой слешов есть в комментах и оно рабочее. Но как тогда будет код выглядеть на Linux если не использовать ф-ю str_replace (замену слешов)?
может что-то я неправильно делаю, но я пробую устанавливать в таком виде: require_once __DIR__ . '\..\src\' . $className . '.php'; и PhpStorm выдает ошибку в результате ничего не работает
"Добавим var_dump() с выводом переменной $className." - добавил, не сработало, не вывелась информация по именам классов, т.е. всё осталось без изменений.
Прочитал все комментарии, но прямого ответа на вопрос человека выше не нашел. Есть просто комменты про решение проблемы обратного слеша у пользователей на Маке.
Поэтому присоединюсь: как это работает, что мы соединяем "стандартные" слеши в пути с обратными слешами? Почему не возникает конфликта?
Доброе утро! Не совсем очевидно, как упаковывать дочерние и родительские КЛАССЫ относительно друг друга в файловой системе, и как должны при этом формироваться неймсппейсы в соответствии с psr-4?
Так же не понятно, как в таком случае поступать с трейтами и интерфейсами, по идее их также нужно упаковывать в отдельные файлы?
Каждый класс, интерфейс или трейт должен лежать в отдельном файле. Имя файла должно совпадать с его именем. Касательно того, как должны выстраиваться неймспейсы - тут нет однозначного ответа, все зависит от бизнес-логики и инфраструктуры проекта.
spl_autoload_register - Регистрирует заданную функцию в качестве реализации метода __autoload(). , которая загружает все неопределенные классы , я все верно понял ?)
Я не совсем понял как и где мы заполняем $classname , он только вызывается в качестве аргумента , а где мы пишем $classname = путь к нужным классам. Как это работает?
Я имею ввиду вот функция , а где мы пишем $classname = путь к файлу с классом? Он что телепат и сам понимает где файлы с классами лежат =)
Зачем же телепат) Когда в коде встречается имя какого-то неизвестного класса, происходит вызов функции, которую мы зарегистрировали через spl_autoload_register. И в качестве аргумента передается имя вот этого неизвестного нам класса. И всё)
Да но, Models тоже папка, почему не начинаем с Models чтобы понятнее было что работаем с моделями, или чтобы лучше структурировать пути кода в проекте?
Понял теперь твой вопрос. Это делается, чтобы отделить код проекта от кода подключаемых библиотек (об этом будет дальше). Код проекта выделяется в отдельный неймспейс с названием проекта. Наш учебный проект называется MyProject, отсюда и начало неймспейса. Для Фейсбука неймспейс начинается с Facebook\...
Прошу простить за вопрос, но хочется на старте понять правильность дерева папок.
У нас есть условный домен "myproject.loc", а в нем есть папки "src" и "www". При этом файл index.php только в папке "www", так?
Т.е. для запуска скрипта мы должны именно ввести в адресной строке "myproject.loc/www/index.php"?
А если просто попробовать открыть myproject.loc при запущенном OpenServer ничего не произойдет? Или в корне будет еще один index.php? Вопрос еще с точки зрения последующего переноса проекта на хостинг, когда ты будешь просто вводить в браузере имя домена.
Т.е. для запуска скрипта мы должны именно ввести в адресной строке "myproject.loc/www/index.php"?
Нет. В адресной строке должно быть myproject.loc
www - это корневая папка для веб-сервера, но не для всего проекта. Для этого нужно соответствующим образом настроить OpenServer. Смотрите урок об этом в курсе PHP для начинающих. На хостинге эта папка в большинстве случаев именуется public_html.
Что касается index.php, то он зарезолвится с помощью правил в .htaccess
Странно,не работает автозагрузка через spl_autoload_register ,хотя пишет failed to open stream: No such file or directory,но показывает путь точно до нужного файла.
www - это корневая папка для веб-сервера, но не для всего проекта.
Если www - корень веб-сервера, myproject.loc - корень проекта? Корень веб-сервера = корень сайта? Что есть папка - MyProject? Просто структурированный каталог рабочих файлов для сайта?
Если начинать с myproject.loc, то на реальном сервере наверное нужно себе представлять наличие папки domains(проект === домен?), а внутри нее уже должно лежать содержимое myproject.loc и все остальное? А если нет на сервере папки domains, то должна быть папка www или public_html, а на одном уровне с этой папки уже должна быть папка src?
И какое место в этой смысловой иерархии занимает папка src? Это тоже корень чего то?
Как - то не получается мысленно перенести предложенную структуру с локального сервера на реальный. Где - корень чего. Смотрел структуры каталогов и файлов у разных хостеров - везде все по разному.
myproject.loc - корень проекта
www (public_html) - корневая директория сайта в рамках веб-сервера
src - тут все исходники для бэкенда, кроме фронт-контроллера, лежащего в www
MyProject - домен проекта, тут непосредственно код проекта, без всей вспомогательной шелухи
Warning: require(C:\Abyss Web Server\htdocs\ООП\MyProject.loc/.../src/Models/Users/User.php): failed to open stream: No such file or directory in C:\Abyss Web Server\htdocs\ООП\MyProject.loc\index.php on line 3
Fatal error: require(): Failed opening required 'C:\Abyss Web Server\htdocs\ООП\MyProject.loc/.../src/Models/Users/User.php' (include_path='.;C:\php\pear') in C:\Abyss Web Server\htdocs\ООП\MyProject.loc\index.php on line 3
сам код
<?php
require __DIR__.'/.../src/Models/Users/User.php';
require __DIR__.'/.../src/Models/Articles/Article.php';
$author = new User('Eldar');
$article = new Article('Заголовок','Текст',$author);
var_dump($article);
Я понял свою ошибку, мне не надо было набирать '/...'. Как только убрал, норм стало
Папку MyProject уже создал, просто забыл создать
я так и не понял, что такое фронт-контроллер,но исправил ошибки:
1)в директории с папкой src создал папку www, в эту папку поместил файл с кодом
2)вернул '/..', теперь не три, а две точки :>
всё работает :D
В синтаксисе namespace присутствует бэкслеш. В убунту при создании функции автозагрузки php ругается на бэкслеши в пути к файлу с классом. Данная проблема решается при помощи функции str_replace.
У меня вопрос. Функцию str_replace нужно применять по умолчанию при создание автозагрузки классов с namespace? Или это просто "костыль" ?
Я тоже с мака, и тоже возникла проблема со слешами.
Вопрос, если мы заменяем слеши функцией str_replace('\', '/', $className) при работе на маке на локалке. После загрузки на боевой сервак - будет ли все работать?
Да нет, без обид, многим Python с его отступами после PHP кажется ужасным, так что извиняюсь если что не так сказал ;)
Пробую изучать потому-что работы, в смысле вакансий для джунов, да и на фрилансе на пыхе раз в пять больше предложений. Wordpress нравится еще, понятно на чем он написан. Но к примеру в Python - self, а тут и self и this... Опять же эта тема, я толком Python еще не изучил, но там вроде import и проще все. Хотя в PHP уже есть возможность сделать строгую типизацию...
А Python я толком не освоил, а теперь PHP, все в голове перемешалось :) Попробую на Javascript еще нажать, та вроде бы есть, как мне на первый взгляд показалось общие черты с Питоном... Потому как одного Python для веба мало, а для серьезных тем у меня с математикой слабо.
Но никого не хотел зацепить, беру свои слова обратно :) PHP прекрасный язык, как и Python :) Просто я не могу уместить их вместе в своих мозгах :)
Спасибо, я уже это понял :) Но опять же в вебе никуда без HTML, CSS, не языки, но тоже требуют изучения. И желательно Javascript, как это все вместить в одну голову :)
Спасибо, Артем, за очередной урок.
Хочу уточнить момент.
Вы в комментариях пишите, что винде все равно какие слеши указаны в пути... То есть, например, пользователь с Виндой сможет работать с сайтом, где пути написаны в обратным слешем, а пользователь Мака, например, не сможет?
Если чЁ, даю конечный код в файле index.php для страждущих:
use MyProject\Models\Users\User;
use MyProject\Models\Articles\Article;
/*Вы заметили, что мы одинаково называли папки, в которых лежат файлы и нейсмспейсы классов? Это мы делали не просто так, а для того, чтобы можно было преобразовать полное имя класса (включая его неймспейс) в путь до .php-файла с этим классом.*/
spl_autoload_register( static function (string $class) {
$class = str_replace('\\', '/', $class); //В операционной системе Windows используются обратные слеши, а в операционной системе Linux используются прямые слеши. И операционная система Windows прекрасно понимает оба варианта, но для Linux важны прямые слеши. Если код запустить на Linux, на котором работают большинство серверов, то у нас ничего работать не будет. Напишем функцию, мы ищем обратные слеши и заменяем их на прямые
$file = __DIR__ . '/src/' .$class. '.php'; //Можем посмотреть путь если перед переменной $file добавить echo. Имя класса преобразуется в путь.
//Проверка: существует ли файл по указанному пути
if (file_exists($file)) { //Мои комменты - Без этого условия код будет работать, но лучше его оставить
require_once $file;
}
});
$author = new User('Иван');
$article = new Article('Заголовок', 'Текст', $author);
var_dump($article);
use MyProject\Models\Users\User;
use MyProject\Models\Admins\Admin;
class Article
{
private $title;
private $text;
private $author;
public function __construct(string $title, Admin $text, User $author)
{
$this->title = $title;
$this->text = $text;
$this->author = $author;
}
public function getTitle() : string
{
return $this->title;
}
public function getText() : Admin
{
return $this->text;
}
public function getAuthor() : User
{
return $this->author;
}
}
Добавил еще один файл и в нем класс, для проверки и понимания автозагрузки. Я правильно понимаю, то что порядок в обозначениях в private должно быть точно такое же, как и в construct? Так же, как и в скобках в construct? Верно?
Нужно оформить код в комментарии (в редакторе комментариев самая первая кнопка).
Нажмите на карандашик и поправьте ваш комментарий, пожалуйста. А потом ответьте мне на этот комментарий. После этого проверю вашу домашнюю работу и отвечу на вопросы.
У меня рядом с index.php ещё остаются файлы с прошло курса (login, upload, feedback, calculator) и папка uploads, а так же папка private рядом с public_html - их тоже в перспективе нужно переместить в src?
Я попробовал - из src не удалось получить иконки фоток и стили css, остальные файлы подключились правильно...
А фотки то почему не отображаются как иконки, когда папка uploads перенесена в src (пути соответственно переписаны)?
И стили не подключаются из src - почему?
...
Опять сам нашёл - потому что папка src (зачем-то(?)) выведена из корневой папки сайта...
Наверно имеловь ввиду "хранение классов в отдельных папках"?
В отдельных файлах. Спасибо, исправил =)
при автозагрузке классов возникает ошибка. Не подключаются неймспейсы, как пофиксить? Код идентичный вашему, я так понимаю проблема в "\" слешах.
Код ошибки:
окей, помощи особо не вижу, пофиксил сам. Заменил обратные слеши через str_replace, таким образом путь стал правильным
Да, всё дело именно в них. Разница в том, что я писал урок под виндой, а там в путях как раз обратные слэши. Ваше решение с использованием str_replace - в самый раз.
А говорите Иван что за 2 года не было такой проблемы с которой сталкиваются маководы
Так вы про это ничего не говорили.
P.S. я не Иван
Кто же ты,тайный незнакомец)
Кек)
Та же проблема что у Sparky, что то до конца не понял как ее решить?
Достаточно просто так:
Спасибо что подменили меня =)
Я вот на линуксе пробую прописать namespace MyProject/Models/Articles;
чтобы не менять слеши, но IDE ругается. Так как верно назвать namespace на UNIX ?
Не разобрался с ошибкой:
var_dump();
PS У меня только нет папки MyProject и все папки маленькими буквами.
Если еще актуально - напиши в личку.
Нет, только что понял свой косяк.
Дело в том, что я указал:
А надо было просто путь до класса без самого класса:
Нэймспейсы должны быть с большой буквы, это стандарт PSR-4. Чуть позже о нем расскажу.
Получается и папки в src тоже...
Да. А зачем не по урокам делали?
А я сразу думал разобрать, что да как, своими руками писал. Время много положил на это правда.
Еще оформительский вопрос остался.
Как правильнее обращаться к классу при создании объекта?
В документации http://php.net/manual/ru/language.namespaces.rationale.php
внизу, в дополнении кто-то написал якобы по PSR стандарту:
Можно и полный неймспейс указывать, а можно через use в начале файла. Второй вариант предпочтительнее.
Я извиняюсь, вопрос был о дотошном перфекционизме как правильнее):
или
Я так понял с корневым \ - более универсально использовать.
С корневым правильно. Можете прочитать про PSR-4.
Что-то я не понимаю почему у меня нет ошибки как в этом уроке когда надо добавить в Article.php
и
У меня без явного определения пространства имен отрабатывается код::
Все, обнаружил свой косяк: не поставил тип переменной User для переменной $author в Article.php.
Это я так понимаю чтобы автором статьи не мог стать кто-то отличный от User (например кот или пес))
Да, Вы всё верно поняли)
Я правильно понимаю, что мы здесь пишем конструкции вида:
для наглядности? В реальной программе с большим количеством кода, лучше использовать псевдонимы и тогда будет меньше таких устрашающе длинных строк:
Вообще без псевдонимов, просто use. Но об этом дальше.
Решение c заменой слешов есть в комментах и оно рабочее. Но как тогда будет код выглядеть на Linux если не использовать ф-ю str_replace (замену слешов)?
И спасибо за урок, пока поковырялся воспроизвести тоже самое, пришло понимание как это должно работать.
Для линукса обычная косая черта в путях используется.
может что-то я неправильно делаю, но я пробую устанавливать в таком виде:
require_once __DIR__ . '\..\src\' . $className . '.php';
и PhpStorm выдает ошибку в результате ничего не работаетНу так а чего слэши обратные?
Подскажите лучше сразу правильный вариант, иначе я не догоню. Я месяц как перешёл на Линукс и для меня не все иногда понятно :)
Правильный вариант в уроке приведен. Там слэши в другую сторону.
"Добавим var_dump() с выводом переменной $className." - добавил, не сработало, не вывелась информация по именам классов, т.е. всё осталось без изменений.
А подключения файлов убрали в самом начале?
Вот такой вопрос появился. При подключении файлов:
Мы получаем из $className путь с обратными слешами
и если подставить то что мы получили к require_once то выходит:
Почитайте комментарии)
Прочитал все комментарии, но прямого ответа на вопрос человека выше не нашел. Есть просто комменты про решение проблемы обратного слеша у пользователей на Маке.
Поэтому присоединюсь: как это работает, что мы соединяем "стандартные" слеши в пути с обратными слешами? Почему не возникает конфликта?
Потому что это винда и ей плевать на наклон слеша)
Доброе утро! Не совсем очевидно, как упаковывать дочерние и родительские КЛАССЫ относительно друг друга в файловой системе, и как должны при этом формироваться неймсппейсы в соответствии с psr-4?
Так же не понятно, как в таком случае поступать с трейтами и интерфейсами, по идее их также нужно упаковывать в отдельные файлы?
Каждый класс, интерфейс или трейт должен лежать в отдельном файле. Имя файла должно совпадать с его именем. Касательно того, как должны выстраиваться неймспейсы - тут нет однозначного ответа, все зависит от бизнес-логики и инфраструктуры проекта.
Артем, спасибо, принято!)
spl_autoload_register - Регистрирует заданную функцию в качестве реализации метода __autoload(). , которая загружает все неопределенные классы , я все верно понял ?)
Да. Только с помощью spl_autoload_register можно добавить несколько функций автозагрузки.
то есть несколько аргуметов в этой функции?
Нет. Несколько разных функций. Почитайте документацию.
_autoload() - использовать нынче кощунство, все вокруг говорят что устарело и не стоит этого делать...
Я не совсем понял как и где мы заполняем $classname , он только вызывается в качестве аргумента , а где мы пишем $classname = путь к нужным классам. Как это работает?
Я имею ввиду вот функция , а где мы пишем $classname = путь к файлу с классом? Он что телепат и сам понимает где файлы с классами лежат =)
А то тут неясные для меня действа происходят, объясните пожалуйста
Зачем же телепат) Когда в коде встречается имя какого-то неизвестного класса, происходит вызов функции, которую мы зарегистрировали через spl_autoload_register. И в качестве аргумента передается имя вот этого неизвестного нам класса. И всё)
На примере класса User это будет выглядеть следующим образом:
src/MyProject/Models/Users/User.php :
namespace MyProject\Models\Articles;
Почему начинаем именно с MyProject а не с src, как правильно путь прописать в неймспейсах, или можно любые пути прописать?
src это просто папка, в которой хранится весь наш код. Внутри нее есть код с неймспейсами, в частности, начинающийся с MyProject...
Да но, Models тоже папка, почему не начинаем с Models чтобы понятнее было что работаем с моделями, или чтобы лучше структурировать пути кода в проекте?
Понял теперь твой вопрос. Это делается, чтобы отделить код проекта от кода подключаемых библиотек (об этом будет дальше). Код проекта выделяется в отдельный неймспейс с названием проекта. Наш учебный проект называется MyProject, отсюда и начало неймспейса. Для Фейсбука неймспейс начинается с Facebook\...
Ясно, спасибо
Прошу простить за вопрос, но хочется на старте понять правильность дерева папок.
У нас есть условный домен "myproject.loc", а в нем есть папки "src" и "www". При этом файл index.php только в папке "www", так?
Т.е. для запуска скрипта мы должны именно ввести в адресной строке "myproject.loc/www/index.php"?
А если просто попробовать открыть myproject.loc при запущенном OpenServer ничего не произойдет? Или в корне будет еще один index.php? Вопрос еще с точки зрения последующего переноса проекта на хостинг, когда ты будешь просто вводить в браузере имя домена.
Спасибо заранее.
Нет. В адресной строке должно быть myproject.loc
www - это корневая папка для веб-сервера, но не для всего проекта. Для этого нужно соответствующим образом настроить OpenServer. Смотрите урок об этом в курсе PHP для начинающих. На хостинге эта папка в большинстве случаев именуется public_html.
Что касается index.php, то он зарезолвится с помощью правил в .htaccess
Понял! Спасибо :)
Нашел еще хорошую статью по неймспейсам и автозагрузке. Может кому пригодится для расширения данного урока: https://github.com/codedokode/pasta/blob/master/php/autoload.md
Странно,не работает автозагрузка через spl_autoload_register ,хотя пишет failed to open stream: No such file or directory,но показывает путь точно до нужного файла.
Linux?
Да,я уже пофиксил)
Как в переменную $className попадает неймспейс класса,который мы хотим подключить,это магия? p.s остальное всё понял.
Когда встречается не используемый ранее класс, вызывается эта функция, в аргумент прилетает полное имя класса, включая неймспейс. И да, это магия.
Это я понял,я не понял,как до аргумента долетает полное имя класса,включая неймспейс,это из-за spl_autoload_register ?
Да
Если www - корень веб-сервера, myproject.loc - корень проекта? Корень веб-сервера = корень сайта? Что есть папка - MyProject? Просто структурированный каталог рабочих файлов для сайта?
Если начинать с myproject.loc, то на реальном сервере наверное нужно себе представлять наличие папки domains(проект === домен?), а внутри нее уже должно лежать содержимое myproject.loc и все остальное? А если нет на сервере папки domains, то должна быть папка www или public_html, а на одном уровне с этой папки уже должна быть папка src?
И какое место в этой смысловой иерархии занимает папка src? Это тоже корень чего то?
Как - то не получается мысленно перенести предложенную структуру с локального сервера на реальный. Где - корень чего. Смотрел структуры каталогов и файлов у разных хостеров - везде все по разному.
myproject.loc - корень проекта
www (public_html) - корневая директория сайта в рамках веб-сервера
src - тут все исходники для бэкенда, кроме фронт-контроллера, лежащего в www
MyProject - домен проекта, тут непосредственно код проекта, без всей вспомогательной шелухи
выходит ошибка
сам код
Я понял свою ошибку, мне не надо было набирать '/...'. Как только убрал, норм стало
Папку MyProject уже создал, просто забыл создать
Почему у вас фронт-контроллер лежит в одной директории с src? Делайте как было в уроке изначально.
И откуда три точки взяли?
Что за фронт-контроллер?
Оу, только сейчас заметил, что их две :<
я так и не понял, что такое фронт-контроллер,но исправил ошибки:
1)в директории с папкой src создал папку www, в эту папку поместил файл с кодом
2)вернул '/..', теперь не три, а две точки :>
всё работает :D
Фронт-контроллер - это точка входа в приложение. В нашем случае это index.php в папке www
Спасибо )))
В синтаксисе namespace присутствует бэкслеш. В убунту при создании функции автозагрузки php ругается на бэкслеши в пути к файлу с классом. Данная проблема решается при помощи функции str_replace.
У меня вопрос. Функцию str_replace нужно применять по умолчанию при создание автозагрузки классов с namespace? Или это просто "костыль" ?
Привет. Нужно применять
Я тоже с мака, и тоже возникла проблема со слешами.
Вопрос, если мы заменяем слеши функцией str_replace('\', '/', $className) при работе на маке на локалке. После загрузки на боевой сервак - будет ли все работать?
Да, там тоже unix
"Вот такими вот нехитрыми действиями мы сделали автозагрузку классов. PHP – прекрасный язык, не правда ли?"
Не уверен, после Python он мне кажется ужасным :)
Зачем же вы его тогда изучаете?)
Да нет, без обид, многим Python с его отступами после PHP кажется ужасным, так что извиняюсь если что не так сказал ;)
Пробую изучать потому-что работы, в смысле вакансий для джунов, да и на фрилансе на пыхе раз в пять больше предложений. Wordpress нравится еще, понятно на чем он написан. Но к примеру в Python - self, а тут и self и this... Опять же эта тема, я толком Python еще не изучил, но там вроде import и проще все. Хотя в PHP уже есть возможность сделать строгую типизацию...
А Python я толком не освоил, а теперь PHP, все в голове перемешалось :) Попробую на Javascript еще нажать, та вроде бы есть, как мне на первый взгляд показалось общие черты с Питоном... Потому как одного Python для веба мало, а для серьезных тем у меня с математикой слабо.
Но никого не хотел зацепить, беру свои слова обратно :) PHP прекрасный язык, как и Python :) Просто я не могу уместить их вместе в своих мозгах :)
Не стоит изучать 3 языка сразу, плохая идея) Вряд ли изучите даже один при таком раскладе.
Спасибо, я уже это понял :) Но опять же в вебе никуда без HTML, CSS, не языки, но тоже требуют изучения. И желательно Javascript, как это все вместить в одну голову :)
Спасибо, Артем, за очередной урок.
Хочу уточнить момент.
Вы в комментариях пишите, что винде все равно какие слеши указаны в пути... То есть, например, пользователь с Виндой сможет работать с сайтом, где пути написаны в обратным слешем, а пользователь Мака, например, не сможет?
Всё так
Значит str_replace за правило.
Ага)
Если чЁ, даю конечный код в файле index.php для страждущих:
Извините, уточнение:
<?php
namespace MyProject\Models\Articles;
use MyProject\Models\Users\User;
use MyProject\Models\Admins\Admin;
class Article
{
private $title;
private $text;
private $author;
}
Добавил еще один файл и в нем класс, для проверки и понимания автозагрузки. Я правильно понимаю, то что порядок в обозначениях в private должно быть точно такое же, как и в construct? Так же, как и в скобках в construct? Верно?
Нужно оформить код в комментарии (в редакторе комментариев самая первая кнопка).
Нажмите на карандашик и поправьте ваш комментарий, пожалуйста. А потом ответьте мне на этот комментарий. После этого проверю вашу домашнюю работу и отвечу на вопросы.
Почитав комментарии понял, что вход через http://localhost/www/index.php не верен, а если просто localhost, то выдает вот это непонятное.
Привет. А какой у тебя веб-сервер?
Open Server, версия PHP в нем 7.1
Настрой его по уроку из курса для начинающих. У тебя не localhost должен быть, а myproject.loc
У меня рядом с index.php ещё остаются файлы с прошло курса (login, upload, feedback, calculator) и папка uploads, а так же папка private рядом с public_html - их тоже в перспективе нужно переместить в src?
Я попробовал - из src не удалось получить иконки фоток и стили css, остальные файлы подключились правильно...
Лучше отдельный проект завести)
А фотки то почему не отображаются как иконки, когда папка uploads перенесена в src (пути соответственно переписаны)?
И стили не подключаются из src - почему?
...
Опять сам нашёл - потому что папка src (зачем-то(?)) выведена из корневой папки сайта...
Всё, что должно грузиться браузером (картинки, стили, js) должно лежать в www.