[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Интересное PHP. Просто погудеть.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Эли4ка
Хотя стоп. У меня есть такие ошибки, которые не критичны. Например сам файл скачался, а в БД не добавился, то есть нужно будет вывести размер, куда его сохранили и ошибку, что в Бд все это не сохранилось. Как быть в таком случае?!
twin
Цитата (Эли4ка @ 13.03.2018 - 17:23)
trigger_error почему ее для ошибок не использовать?
Потому что это не ошибка программы. Это исключительная ситуация, которая не зависит от работоспособности скрипта. trigger_error для других целей. И работает не совсем так. Потом поймешь, когда будем ловить ексепшен.

Цитата (Эли4ка @ 13.03.2018 - 17:25)
И она может не только в классах работать
Не бойся классов. Это не ООП вовсе. Класс, это просто удобная обертка для группы функций, не более того. ООП, это религия. Тут пока ей не пахнет. smile.gif

Цитата (Эли4ка @ 13.03.2018 - 17:30)
Хотя стоп. У меня есть такие ошибки, которые не критичны. Например сам файл скачался, а в БД не добавился, то есть нужно будет вывести размер, куда его сохранили и ошибку, что в Бд все это не сохранилось. Как быть в таком случае?!

Это исключение будет брошено только тогда, когда произойдет облом с доступом к удаленному файлу: 404, 500, обрыв коннекта, и все в том духе. Остальные ошибки позже. По порядку. Пока с этим разберись.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Эли4ка
Цитата
Не бойся классов. Это не ООП вовсе. Класс, это просто удобная обертка для группы функций, не более того. ООП, это религия. Тут пока ей не пахнет.

Я понимаю, но просто ведь можно все сделать на функциях? rolleyes.gif

Цитата
Это исключение будет брошено только тогда, когда произойдет облом с доступом к удаленному файлу: 404, 500, обрыв коннекта, и все в том духе. Остальные ошибки позже. По порядку.

Хорошо

Цитата
Потому что это не ошибка программы. Это исключительная ситуация, которая не зависит от работоспособности скрипта. trigger_error для других целей. И работает не совсем так. Потом поймешь, когда будем ловить ексепшен.

Поняла.
twin
Цитата (Эли4ка @ 13.03.2018 - 17:46)
Я понимаю, но просто ведь можно все сделать на функциях?
Можно. Но код будет грязным.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Эли4ка
Цитата
Можно. Но код будет грязным.

Из-за чего он загрязнится? Из-за вот этих отловов ошибок?
Эли4ка
Блин, вот понимаю, что вы хотите мне объяснить, а я все спорю и спорю. Просто я правда не понимаю, неужто есть предел использования функций в php для относительно чистого кода, когда нужно переходить к классам, а потом к namespace'ам sad.gif
twin
Цитата (Эли4ка @ 13.03.2018 - 18:07)
Блин, вот понимаю, что вы хотите мне объяснить, а я все спорю и спорю.
Вот это правильно. Свое мнение можно менять только под прессом неопровержимых аргументов, не ранее. Когда сама согласишься, что да, действительно так лучше, тогда всё. До того нужно спорить. Иначе попрешь в общей серой массе учить паттерны. :D

Цитата (Эли4ка @ 13.03.2018 - 18:07)
Просто я правда не понимаю, неужто есть предел использования функций в php для относительно чистого кода, когда нужно переходить к классам, а потом к namespace'ам
Да, есть. И у тебя в коде он явно превышен))) Функции хороши, когда они не зависят от состояния программы. Допустим нужно сложить два числа. Чтобы не повторяться, запечаываем в функцию:

function ($a, $b)
{
return $a + $b;
}


Как только функция начинает жестко зависеть от другой функции (композиция), даже если результат передается аргументом (агрегация), нужно задуматься о классе.

Неймспейсы, это другая песня. Пока тебе не надо.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Zzepish
twin
В паттернах ничего плохого нет smile.gif я про них узнал достаточно поздно. Оказалось, что я их юзаю, просто дошел сам
twin
Цитата (Zzepish @ 13.03.2018 - 18:48)
В паттернах ничего плохого нет
А кто сказал, что есть? smile.gif Я имел ввиду, что можно учиться, понимая что делаешь, а можно тупо зубрить шаблоны, не осознавая происходящих процессов. Что многие и делают.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Эли4ка
twin, то есть выходит, что функции получения информации о файле, скачивание файла( кстати на днях перепишу функцию скачивания с использованием stream_* ) - это функции, которые не зависят от состояния программы, а вот вывод ошибок зависит. Но может тогда отказаться от ошибок? Или лучше этого не делать?
twin
Нет, не так. Чтобы скачать файл, нужно получить его адрес. Получает его другая функция. Плюс ошибки. Плюс база данных и так далее. Это куча связей. Так что уже пора задуматься.

Чистые функции не должны ни от чего зависеть. Только от натива. Ну максимум это должы быть обертки. Ну еще может быть несколько исключений. Если функции взаимодействуют между собой, то они гораздо эфективнее работают в классе. Или в классах. Сейчас я бы собрал все в один для наглядности, потом было бы видно, как красиво сделать декомпозицию.



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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Эли4ка
теперь поняла. Теперь поняла!

Есть функции, которые получают тип материала не из ноды и из ноды( это если коллекция )-вынесла в функцию, так как там глубокий json ответ.

Есть функция для скачки файла.

Есть функции для получения фото и видео ссылки для сингл файла( то есть не коллекции )

Если функции для получения фото и видео из ноды( у них разные пути просто )

Есть функция для проверки полученной ссылки на соответствие.

Вот и все.
Стоит ли их пихать в один класс?
twin
Ну тут два варианта. Можно сначала запихать и посмотреть. А можно заранее спланировать, сколько задачь и сколько ответственностей. smile.gif

Есть еще вариант - начать все сначала и продумать алгоритм. Сделать его линейным, а значит болле простым и надежным.

Сейчас я не совсем понимаю логику твоей программы. На мой взгляд алгоритм должен быть таким:

1. Получаем JSON.
2. Разбираем его в массив (один) с путями.
3. Разбираем массив.
4. Скачиваем файлы
5. Заносим данные в хранилище.

Так у тебя?

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Эли4ка
2. сложно так сделать, так как если это не фото или видео, то в коллекции все пути лежат глубже и с ними, как с фото и видео не поработаешь.

Все остальное так.
twin
Ничего сложного. Во разбирай пока это:
class Media
{
protected $json;
protected $paths = [];

public function __construct($url)
{
set_error_handler(function () use ($url) {
throw new RuntimeException($url);
});

$json = file_get_contents($url);
restore_error_handler();

$this->json = json_decode($json);
$error = json_last_error();

if ($error !== JSON_ERROR_NONE) {
throw new DomainException($error);
}

$this->createPaths();
}

public function getPaths()
{
return $this->paths;
}

protected function createPaths()
{
$media = $this->json->graphql->shortcode_media;

if ($media->is_video) {
$this->setVideo($media);
} else {
$this->setPhoto($media);
}
}


protected function setVideo($media)
{
$this->paths[] = $media->video_url;
}

protected function setPhoto($media)
{
$this->paths[] = $media->display_url;
}
}


$media = new Media('https://www.instagram.com/p/Bc5E0j2H-em/?__a=1');
$paths = $media->getPaths();

?><pre><?
var_dump($paths);


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.