Comments 31
Если этот класс поможет хотя бы одному человеку я буду очень рад этому.
Не поможет.
1. Для начала изучите PSR, ну или хотя бы выработайте свой оригинальный стиль написания кода (то у вас у операции сравнения или присваивания есть слева и справа пробелы, то нет, ну и т.д.). Это не придирка: код, написанный без какого-либо следования соглашениям трудней понимать.
2. Давайте переменным, аргументам и функциям/методам понятные имена. Что означает «U» в названии метода "_serverU()"? Зачем там знак подчеркивания (в PHP4 так, как правило, обозначали приватные методы — если не ошибаюсь).
3.
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, но кривые, а так конечно не стал бы велосипед выдумывать хотя я ничего и не выдумывал просто собрал все вместе, а по итогу нужно дорабатывать.
Как вы себе представляете использование вашего класса в проекте с REST API, например? Тоже alert выводить?
Или как разработчику обработать эту ошибку? Завершить жизненный цикл приложения. В вашем конкретном случае было бы уместнее использовать исключение, а не завершать работу скрипта
И еще забыл про header спросить. А как вы заголовки в php отправляете без использования header
Если ваш класс используется для скачивания/загрузки файлов, то он должен только этим и заниматься. Заголовки — это проблема другого уровня: клиента вашего класса, если хотите
Я понял, что вы хотели сказать. Я говорю о том, что ваш класс выполняет сразу несколько действий, что нарушает SRP. В идеале ваш класс должен отдавать имя файла, его mime-type и путь до него. Все остальное (в т.ч. заголовки) должно ложиться на плечи кода, который взаимодействует с вашим классом
Через response, прикрутите от psr
Мне кажется, автору статьи нужно все слова «загрузка» выкинуть из статьи.
Библиотека для скачивания, закачивания и т.д. Поддерживает докачку в обе стороны.
Самое печальное в таких статьях — это то, что они не пишутся для того, чтобы получить какой-то фидбек, чтобы учесть его в будущем. Это видно по некоторым ответам автора, типа: ну и что, что в библиотеке, которую подразумевается использовать на разных сайтах, я использую 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 в виде функции
PHP class для скачки и закачки файлов на сервер