Pull to refresh

Comments 31

Если этот класс поможет хотя бы одному человеку я буду очень рад этому.

Не поможет.
1. Для начала изучите PSR, ну или хотя бы выработайте свой оригинальный стиль написания кода (то у вас у операции сравнения или присваивания есть слева и справа пробелы, то нет, ну и т.д.). Это не придирка: код, написанный без какого-либо следования соглашениям трудней понимать.
2. Давайте переменным, аргументам и функциям/методам понятные имена. Что означает «U» в названии метода "_serverU()"? Зачем там знак подчеркивания (в PHP4 так, как правило, обозначали приватные методы — если не ошибаюсь).
3. Почему бы не вынести список mime-типов в конфигурацию? Или предлагаете каждый раз править Ваши исходники чтобы внести в него изменения? UPD: не совсем разобрался сначала, зачем оно там.
4. Класс привязан к jQuery, а это уже давно не 100% необходимая библиотека.

Ну и много чего еще. Я про саму реализацию даже писать ничего не хочу, криво слеплено.

P.S. Следовало бы еще вычитать статью как следует перед публикацией — куча ошибок.
Ну не поможет так не поможет, я не настаиваю.
1. Пробелы после сравнения у меня только если запись в одну строчку, а в случае присваивания так там в коде все с пробелами, а в условиях, кавычках и js без пробелов хотя кое-где не доглядел, но мне кажется что это не критично;
2. U значит upload, а подчеркивание для выделения;
4. На счет Query согласен, но это можно будет допилить;
Если не секрет вы про какую именно кучу ошибок?
  • статические свойства — не самое лучшее решение; я бы посоветовал посмотреть в сторону паттерна builder
  • code style очень хромает, привести бы к PSR
  • 2020 год на дворе, оформить бы класс как пакет для composer
  • наличие авто тестов улучшило бы ситуацию. Да и понимание тоже
  • что делать пользователям, у которых нет на странице подключенного jQuery? Переписать бы JavaScript часть на vanilla
  • cUrl init и последующая "портянка" свойств — дважды, вынести бы в отдельный метод

Если честно, готовых решений (пакетов) с такой функциональностью — валом. Было бы только желание packagist открыть да поисковый запрос нужный вписать.


А так, в целом и общем, автор старался и что-то получилось. Если кому-то пригодится — пускай пользуются.

Благодарю за критику. Попробую доработать на досуге.
Если честно смотрел я на это большое кол. решений и чаще всего они кривые. Да, написанные с соблюдением PSR, но кривые, а так конечно не стал бы велосипед выдумывать хотя я ничего и не выдумывал просто собрал все вместе, а по итогу нужно дорабатывать.
UFO just landed and posted this here
Вообще-то die там всего два раза использовано и их никуда прикручивать не нужно т.к. они всего лишь alert выводят.

Как вы себе представляете использование вашего класса в проекте с REST API, например? Тоже alert выводить?
Или как разработчику обработать эту ошибку? Завершить жизненный цикл приложения. В вашем конкретном случае было бы уместнее использовать исключение, а не завершать работу скрипта

В следующей правке добавлю исключение. Кстати те методы которые можно использовать с REST API не имеют никаких die или header.
UFO just landed and posted this here

И еще забыл про header спросить. А как вы заголовки в php отправляете без использования header

Если ваш класс используется для скачивания/загрузки файлов, то он должен только этим и заниматься. Заголовки — это проблема другого уровня: клиента вашего класса, если хотите

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

Я понял, что вы хотели сказать. Я говорю о том, что ваш класс выполняет сразу несколько действий, что нарушает SRP. В идеале ваш класс должен отдавать имя файла, его mime-type и путь до него. Все остальное (в т.ч. заголовки) должно ложиться на плечи кода, который взаимодействует с вашим классом

Через response, прикрутите от psr

Каждый php программист должен написать свой фреймворк, а потом перейти на общепринятый. Это нормально. Вы все правильно делаете, вне зависимости от.
«Скачивание», «закачивание», «загрузка».
Мне кажется, автору статьи нужно все слова «загрузка» выкинуть из статьи.

Например
В какую сторону загрузка: на сервер или с сервера?

image
Нет, ну если бы вы повнимательней читали пункт статьи откуда взяли картинку, то увидели бы — Загрузка файла или файлов на сервер с индикатором прогресса
Интересно, но хотелось что-то маленькое, простое и функциональное. Хотя из вашего и комментариев выше я понял что зря вообще занимался этой писаниной. Лучше творить себе в удовольствие и не тратить время на все эти глупости.

Самое печальное в таких статьях — это то, что они не пишутся для того, чтобы получить какой-то фидбек, чтобы учесть его в будущем. Это видно по некоторым ответам автора, типа: ну и что, что в библиотеке, которую подразумевается использовать на разных сайтах, я использую die с js'ом — у меня же работает, значит, и у вас заработает.
Такое ощущение, что где-то людей сажают в подвал, приковывют к батарее цепями и заставляют день и ночь в одиночку писать проекты без доступа к интернету. А когда этим людям удается сбежать, вместо того, чтобы сказать, что в подвале осталось еще N человек, они пишут подобные статьи, защищая говнокод, вместо того, чтобы пытаться что-то исправить. Печально это

А что в этом плохого? Наоборот, нахожу большую пользу от таких разборов. Может, направили человека в нужное русло. Знаний в Сети полно. Но, бывает, не хватает указания верного направления от практикующих, а не теоретиков или таких же малоопытных.

наверное, имело смысл добавить в исходный комментарий, что обычно авторы таких постов всячески сопротивляются направлению в нужное русло

Я ничему не сопротивляюсь, просто нужно нормально объяснить что не так. Чего сразу ругаться и минусовать? Или это здесь на хабре так заведено — новичкам побольше грязи?
Благодарю вас за высокое мнение обо мне. Действительно вы угадали недавно удалось сбежать из подвала и сразу же бросился говнокодить. Больше никого в этом подвале не осталось, я был последний.
Давайте направим молодого разработчика в нужное русло.

Общие положения про 2020й год, composer, тесты уже написали. Обратим внимание именно на код — github.com/borivit/CargaDes/blob/master/cargades.class.php И так, что в нём не так:
1. комментарии на русском языке. Сочувствую разработчикам, которые этот язык не знают.
2.
public static $l = 0;//login
public static $p = 0;//Pass

почему не булевые true\false? Дальше по коду эти переменные не используются для математических (хотя бы) вычислений
3. задача __construct() инициализировать объект, но в нём выполняется основной код класса. Пусть в конструкторе будет что-то типа
$this->build();
и весь код мигрирует в этот метод.
4. метод descargaFile(). В нём есть конструкция if-else. Следующий вариант написания предпочтительнее:
$handle = @fopen($realFilePath, 'rb');
        
if (!$handle) {
    return false;
}
        
$sleep_time = $speed?(8 / $speed) * 1e6:0;
fseek($handle, $rangePosition);
while( !feof($handle) and !connection_status() ){
    print fread($handle, (1024 * 8));
    usleep( $sleep_time );
}
fclose($handle);
        
return true;

И таких конструкций достаточно много в классе.
5. Вы написали, что подчёркивание для выделения. Выделение чего? Метод _serverD() тоже начинается с нижнего подчёркивания. И в нём же есть следующая каша:
$login = !$login?self::$l:$login;
$pass = !$pass?self::$p:$pass;

Читабельность этого кода сводится к 0.
6. файл стилей style.cargades.css в коде встречается несколько раз (один, два). Было бы хорошо вынести его в отдельное свойство класса, чтобы при необходимости изменить название — сделать это один раз.
7. метод _serverProgress($style='style.cargades.css', $idp='', $color='4098D3'). Если $color будет NULL? И
var pb = width_css>100?Math.ceil(width_css/100):Math.ceil(100/width_css);
о той же читабельности.
8. Не знаю, как правильно это назвать, но есть правило (но это не точно): вначале класса объявляются переменные, а потом методы. Это как в супермаркете овощи будут перемешанные с колбасой.
9. в php классе хорошо бы иметь только PHP, без JS и html. Их надо вынести в отдельные соответствующие файлы.
10 (бонус). Закрывающий ?> не нужен :)

Благодарствую, буду исправлять, есть над чем работать.

Когда то писал подобную штуку, во времена 5.3 в виде функции

Sign up to leave a comment.

Articles