170 похожих чатов

Подскажите пожалуйста, у меня есть в vendor класс, который я,

естественно, не хочу там корячить, но мне нужно переписать один из его методов. Логично, что я делаю расширение
class extReadability extends Readability, но проблема, что в том методе, которые мне нужно переписать используются другие private методы, например:
$this->dom = $this->loadHTML($html); а он - private:
private function loadHTML($html)
{
......
}

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

6 ответов

7 просмотров

Слишком мало вводных данных

Dimases- Автор вопроса
The Ant 🐜
Слишком мало вводных данных

почему мало? http://prntscr.com/x6yyp3 Мне надо переписать метод parse класса Readability, выделенные методы на скриншоте - private и получается что из класса, который extends Readability нельзя вызвать. Я сделал $this->dom=callPrivateMethod($this,'loadHTML',[$html]); http://prntscr.com/x6z91n где function callPrivateMethod($object, $method, $args) { $classReflection = new \ReflectionClass(get_class($object)); $methodReflection = $classReflection->getMethod($method); $methodReflection->setAccessible(true); $result = $methodReflection->invokeArgs($object, $args); $methodReflection->setAccessible(false); return $result; } Но говорят, что это не самый лучший способ и рекомендуют использовать только в тестах. Сам класс - вот https://github.com/andreskrey/readability.php/blob/master/src/Readability.php

Dimases
почему мало? http://prntscr.com/x6yyp3 Мне надо пе...

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

Dimases- Автор вопроса
The Ant 🐜
Я бы предложил переписать эту шнягу на вмегяемую р...

Все можно переписать, только обычно нет времени. Ладно, может на рефакторинге. Пока так сделаю. Там задача - разделять контент на фрагменты и plain text - пока лучше ничего не нашел, с чего начать.

Dimases
Все можно переписать, только обычно нет времени. Л...

Просто сервисный объект хранит состояние, это все очень сильно усложняет. К тому же запривачен весь полностью. Можно было бы декоратор написать, но похоже это невозможно.

Dimases- Автор вопроса
The Ant 🐜
Просто сервисный объект хранит состояние, это все ...

да, что запривачен - сам не пойму, зачем это надо было

Похожие вопросы

Обсуждают сегодня

Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
лучше скажите, причём тут паскаль?
Alexey Kulakov
22
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
#include <stdio.h> #include <stdlib.h> #include <time.h> int** generate_table(int size_matrix) { int** matrix = (int**)malloc(size_matrix * sizeof(int*)); for (int i ...
Чувак
1
@PerlBanjoBot use v5.38; sub split_on_cond($arr, $cond) { ($a, $b) = ([], []); push @{ $cond->($_) ? $a : $b }, $_ for @$arr; ($a, $b) } use Data::Dumper; warn Dumpe...
Sergei Zhmylove
10
Всем привет! как узнать, что текст в TSkLabel был выведен сокращенным ? Есть функция для TLabel которая позволяет определить , что текст выведен сокращенным function TFrmMai...
DELPHI SOLUTIONS
6
Вот объясните, как это работает: Вот есть допустим unix-подобная система, и программа запускает допустим printf или fork, как это передается ядру, и как оно обрабатывать начин...
Егор
14
Дебил? Я ищу друга
Bitard 228
27
У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
Карта сайта