Уроки хорошие, спасибо! Если вам не трудно, то делайте пожалуйста более крупный шрифт. С ноута неудобно смотреть.
@GreatOsmanSultan Жыл бұрын
Лайк для продвижения!
@NewUser786546 ай бұрын
Настало время странных вопросов от программиста со стажем. Пространство имен - зачем оно? Ведь если подумать, то каждый файл лежит в своей папке. Вон папка вендор - все файлики по папкам. И пусть имена файлов в разных папках совпадают, имена классов совпадают - папки то разные. А если в одной папке будут два одинаковых класса, то.. то это вопрос к команде, кто это сделал? Вот тот же юнити - генератор случайных чисел. Попробуйте вызвать метод Random - конфликт ) Не спасло пространство имен. И пойдете ручками прописывать полное имя или в use указывать конкретный класс. Composer. Сторонняя программа, php скрипт. А что, в языке нет никакого механизма для реализации автозагрузки классов? Как бы есть spl_autoload_register() , но как бы и нет ) Вот C# живет без композера и ничего - автозагрузка классов из коробки. Строго типизированный язык, кстати, в отличии от PHP. А PHP у нас...непонятно типизированный - пиши и так и сяк, но любим в строгую типизацию, но стандарта такого нет...в PSR ничего такого не встречал. Хотя и PSR забавный стандарт. И вроде есть и вроде куча компаний отказались от него. И вроде в каждой конторе свой стандарт написания кода. Ну это ж PHP. Установка, переустановка, библиотек, поиск в сети, проблемы, зависимости - жуть как интересно! Современный язык или фреймворк...да тот же юнити - 1 клик и все установлено. Встроенный магазин ассетов. C# VS - аналогично. Большинство программ - аналогично, все расширения - плагины в 1 клик. 2024 год . Папка vendor - не храним в гит? Потому что никто не хранит в гит т.к. есть файл composer.lock, который установит... в точности такие же версии пакетов. Разница? Её нет. Экономим место на серверах гитхаба? Любим +1 команду composer install? Не любим хранить всё файлы проекта целиком - т.е. весь проект, а не часть проекта с ссылками на докачку пакетов, которые, разумеется всегда будут доступны (в связи с текущей ситуацией ). Разработчики никогда не изменят ни байт пакета, коих в vendor +100500 и связаны они так, что разобраться невозможно? Ну ок -как говорилось в фильме все побежали..и я побежал. ) Интересной айти получается. Всё делают всё одинаково и ни о чем не задумываютя, убеждая, что так и должно быть. А потом устарело, пофиксили, из не строго типизированного в строго типизированный язык и снова убеждают, что вот сейчас так как должно быть. Интересно, а когда PHP уже окончательно позаимствует хорошее, правильное ООП у C#, а не будет воровать кусочками? Вопросы...
@bukachuk_php6 ай бұрын
Когда вы работаете в команде, это еще можно в теории как-то контролировать (опять же зачем), но если например сторонний разработчик хочет сделать модуль, который вы будеет использовать с помощью composer например, разработчик получается делает свой корневой namespace (который как правило имя компании или проекта) а далее внутри реализует свою структуру. Как PHP опять же автозагрузчик поймет в какой именно файл подключать если их имена одинаковые, его как-то надо найти, у меня есть где-то видео про автозагрузчик, там spl_autoload_register и к нему стандарт PSR4?
@NewUser786546 ай бұрын
@@bukachuk_php папки у файлов будут разные. Что мешает Composer автоматически генерировать неймспейс, исходя из пути к папке с файлом? Внутри, для себя, не беспокоя нас. Или намного интереснее писать ручками (или не ручками - ide сама вставит) неймспейс, совпадающий с путем к папке, но по сути не имеющий никакой связи с папкой? Папка хотя бы существует, а неймспейс взят с потолка (сформирован по общепринятым правилам, но технически может быть любой). Фактически, прописывая неймспейс (причем в каждом файле , вне зависимости от вложенности каталогов т.к. тут нет связи) мы создаем избыточные доп. идентификаторы, никак логически не связанные с нашим кодом и системой. Файловая система = БД. Ей не нужны неймспейсы. Уже всё есть. Следует подумать, а есть ли неймспейсы в объективном мире? Не припомню. В объективном мире есть иерархическая структура - Москва, Ленина, дом 5, квартира 10. Самара, Ленина, дом 5, квартира 10. И аналогично в IT - IP v4 - сети, подсети, маски. Неймспейс = избыточный идентификатор, потому что надоело писать префикс. А рядом гит, хранящий кучу одинаковых по содержанию файлов (разные хеши), без неймспейсов и прекрасно знающий какой файл в каком коммите.
@bukachuk_php6 ай бұрын
Структура каталогов повторяет namespace как раз с целью одной - найти файл на диске, как интерпретор поймет где искать файл? Я пишу например $route = new Rounte(); - как PHP найдет путь в нашем случае? А что если класс Route во многих проектах (что есть истина как и класс Response итд в Symfony и других фреймворках и библиотеках). Нам нужно подключить определенный файл в определенном каталоге. Я не совсем просто понимаю как PHP подключит файлы. Composer автоматически генерировать неймспейс, исходя из пути к папке с файлом? namespace как раз нужны, чтобы изолироваться от пространства имен на уровне кода, а не на уровне файловой системы
@NewUser786546 ай бұрын
@@bukachuk_php Открываете Visual Studio C#. Пишите скрипт без namespace. Пишите другой скрипт, без namespace. Visual Studio всё видит, все публичные методы, компилятор всё находит. Если PHP что то не может, ну значит такой PHP. "Структура каталогов повторяет namespace как раз с целью одной - найти файл на диске" - ? Простите, вы точно понимаете как это работает? C# using System.Collections.Generic; //Файл лежит в папке C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\.. JAVA import java.util.ArrayList; Python from math import sqrt PHP require 'vendor/autoload.php'; // Круто ребята, круто. Как бы выше, в более серьезных языках, такого нет, но как бы в PHP да. use Vendor\Package\ClassName; // А давайте назовем пространство имен как путь к папке, чтобы что? А давайте!
@bukachuk_php6 ай бұрын
чтобы потом файл подключить автоматически, здесь это нужно делать руками, если это без composer www.php.net/manual/en/function.spl-autoload-register.php если у вас будет композер - он построит карту, на продакшен она жестко прописывается. Проблема в том когда вы начнеет подключать файлы с разными пускай именами файлов - вы получите конфликт имен и ошибка будет из серии - этот класс это объявлен. Как я писал выше например при случае базовой вещи сделанной в разных организациях. "Простите, вы точно понимаете как это работает" - Да, я точно понимаю как это работает, прочитайте ссылку далее это стандарт автозагрузки PSR4, раньше был другой немного, так устоена автозагрузка в PHP вот документ www.php-fig.org/psr/psr-4/ Класс у нас имеет - namespace Platform\Controller; Имя файла - BedTypeController Файл находится - src/app/Platform/Controller/BedTypeController.php Composer настройки: "autoload": { "psr-4": { "Platform\\": "src/app/Platform" }, }, В итоге подключаем класс - use Platform\Controller\BedTypeController; Platform из настроек это каталог - src/app/Platform Далее меняем косысые полном пути до класса и добавляем (по сути Platform заменили на src/app/Platform и косые тоже Получается: src/app/Platform/Controller/BedTypeController Подключаем файл дописав .php: require_once "src/app/Platform/Controller/BedTypeController.php"; PHP сам не умеет собирать файлы в кучу в том числе это нужно иметь ввиду, это делается программно, раньше кстати было так - www.php-fig.org/psr/psr-0/ и там тоже есть пример
@РасулМырзакулов-э8и Жыл бұрын
Здравствуйте папку вендор в гитхаб не будем передавать? То есть вендор гитигнор можно прописать?все видео оказ есть ответ
@bukachuk_php Жыл бұрын
Да, тк вендоры устанавливаются в новой среде заново, для этого есть composer.json и composer.lock который залочит версии пакетов