Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
15 / 15 / 1
Регистрация: 19.10.2012
Сообщений: 570

Классу нужен другой объект: как правильно?

25.05.2022, 10:32. Показов 1066. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
добрый время сутки)
есть класс парсера. ему для работы нужен объект curl. не знаю как правильно: создавать объект curl при создании класса, где-нибудь в конструкторе, или создавать его отдельно от парсера, и передавать в методы как параметр?
спасибо)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.05.2022, 10:32
Ответы с готовыми решениями:

Не баг ли? Объект видит приватные члены другого объекта этого же класса
не баг ли что getObj() можно изменять приватное свойство другого объекта class Exam1 { private $id; public...

Свойству класса присвоить объект другого класса
Добрый день форумчане. Подскажите, пожалуйста. Свойствам класса можно при описании присваивать скалярные значения или массив. А как можно...

Как из одного объекта получить объект другого класса?
Форумчане, подскажите. У меня есть два класса: class Category{ private $id = ''; private $parentId = ''; private...

7
3052 / 1453 / 263
Регистрация: 16.03.2008
Сообщений: 6,476
Записей в блоге: 2
25.05.2022, 11:09
На мой взгляд не правильно вообще мешать в одну кучу.

У вас две "подзадачи"

1. Получить контент
2. Распарсить контент

А если захотите распарсить контент загруженный иным способом?

Имхо. Клиентом получаете контент, а в парсер передаете именно контент. (Если, конечно, нет каких то реальный и объективных причин конкретно в вашей ситуации использовать как таковой клиент внутри парсера.
0
15 / 15 / 1
Регистрация: 19.10.2012
Сообщений: 570
25.05.2022, 11:23  [ТС]
расскажу подробнее про задачу.
есть магазин с товарами. товары выгружаются из 1с, но без описаний. название, цена, артикул. вся остальная информация есть на других сайтах этой же компании. их 2. т.е. делаю механизм, который будет получать информацию из 2х источников.
кроме этого - товар находится через поиск. первым запросом я обращаюсь в поиск по сайту, смотрю нашлось ли что-то, потом получаю ссылку, иду по ней, и уже там собираю инфо о товаре.
вообще идея сделать такой парсер в стиле ооп пришла после провальной попытки не заморачиваться и сделать его в процедурном стиле. штука в том что на сайтах источников все параметры называются однотипно. у всех товаров цвет, у всех товаров размер, куча типа-общих параметров. я их собрал, разделил по категориям, чтобы на сайте были понятные названия свойств и удобочитаемый умный фильтр. но этот порыв привалил меня необходимостью при парсинге понимать к какой категории относится товар, и к с какими свойствами в нашей бд связывать свойства этого товара.
хочу сбежать от макарон - сделать аккуратный объект, которому скармливаешь артикул, он творит магию, и отдает массив свойств. и я думаю куда лучше прилепить этот самый курл
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
25.05.2022, 12:20
Ну если прям совсем по ООП, то создаете интерфейс и прячете за ним работу с курл. А реализацию этого интерфейса передаете параметром в конструктор. А можно просто Guzzle скачать и не пилить свой велосипед
Создавать объект напрямую точно плохо, как минимум будут сложности с тестированием, а curl это же еще и поход по сети.
Единственное, если это разовый парсер, то может оно того и не стоит...
0
15 / 15 / 1
Регистрация: 19.10.2012
Сообщений: 570
25.05.2022, 15:06  [ТС]
guzzle, судя по тому, что я про него нашел, это тоже самое что и курл, только удобнее. точно так же мне надо сделать его объект и через него получать контент... не понял почему использование guzzle убирает какой-то велосипед. если можно то объясните этот момент.

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

правильно ли я понял общую мысль - не надо пихать в классы этот куло-газл. создавать его, получать текст страницы, и уже текст страницы отдавать методам, которые будут получать нужные куски? и уже эти методы описывать в классе?
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
25.05.2022, 15:34
Цитата Сообщение от user20011993 Посмотреть сообщение
не понял почему использование guzzle убирает какой-то велосипед. если можно то объясните этот момент.
Потому что у него из коробки уже есть интерфейс, соответственно самому можно его не описывать.
Более того, это не просто интерфейс, а интерфейс по PSR. Многие аналогичные библиотеки реализуют его, что позволяет подменять одну реализацию на другую. Это возможно потому что код зависит от интерфейса, а не от реализации.

Пересказывать все принципы можно долго. Лучше почитайте про solid, grasp, паттерны итд, там все разжевано и с примерами.
0
15 / 15 / 1
Регистрация: 19.10.2012
Сообщений: 570
25.05.2022, 16:35  [ТС]
это про дальнейшую поддержку. вроде понял. на этом этапе интересовало как действовать с таким дополнительным объектом, который нужен для работы. будем пробовать, спасибо
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
25.05.2022, 21:05
Цитата Сообщение от user20011993 Посмотреть сообщение
это про дальнейшую поддержку
Практически все практики про это. Не сложно писать рабочий код. Сложно читать его и вносить изменения. Отсюда и появляются правила аля понятные названия переменных/функций, минимум дублирования, единый стайлгайд...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2022, 21:05
Помогаю со студенческими работами здесь

Класс не наследует свойство, если там ссылка на другой объект
Есть вот такой класс: namespace controllers\admin; use controllers\admin\DefaultController; class AuthController extends...

Правильно ли создавать объект задавая имя класса в строковой переменной?
Доброго времени суток! Рассматриваю такую ситуацию. Есть, например, класс UserName. Правильно ли создавать объект в такой способ? ...

Как правильно описать метод внутри другого метода одного и того же класса?
Извияюсь за возможно глупый вопрос, но ООП тема для меня новая.Вот так выглядел метод класса в начале: public function...

Не получается привести объект, загруженный из ресурса к идентичному классу, но в другой программе
Создаю .resx файл с помощью этой программы: uses system, system.Resources, graphABC, system.drawing; type testClass =...

Как передать объект всему классу
Есть объект w_out типа UserControl. И инициализируется он в основном классе программы public Form1() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru