Почему в классе позволяет использовать все функции другого класса не объявленные в интерфейсе?
Вот структура моего проекта:
index.php
require_once __DIR__.'/classes/SignUp.php';
require_once __DIR__.'/classes/ParsePage.php';
require_once __DIR__.'/classes/CaptchaSolver.php';
$Parser = new ParsePage( 'cookie.txt' );
$CaptchaSolver = new CaptchaSolver( 'token', $Parser );
$DataGenerator = new DataGenerator();
$SignUp = new SignUp( $Parser, $CaptchaSolver, $DataGenerator, 'https://smm-rock.ru');
$create = $SignUp->create();
ParsePage
interface IParsePage {
public function parseSource($str, $case = 1);
public function getPage( $source, $method = 'GET', $post_data = '' );
public function getAllRows($rows);
}
interface IParserGetHtmlString {
public function getPage( $source, $method = 'GET', $post_data = '' );
}
class ParsePage implements IParsePage, IParserGetHtmlString {
...
public function getPage( $source, $method = 'GET', $post_data = '' ) {
...
}
}
CaptchaSolver
interface ICaptchaSolver {
public function rucaptcha($type = 'in', $site_key = '', $pageurl = '');
}
class CaptchaSolver implements ICaptchaSolver {
private $token;
private $parser;
function __construct($token, IParserGetHtmlString $parser) {
$this->token = $token;
$this->parser = $parser;
}
public function rucaptcha($type = 'in', $site_key = '', $pageurl = '') {
...
$go = $this->$parser->parseSource('http://test.ru');
//тут срабатывает и успешно выполняется функция parseSource, хотя ее нет в интерфейсе IParserGetHtmlString
}
}
Почему так происходит? Буду благодарен за разъяснение!
Ответы (2 шт):
Автор решения: Алексей Шиманский
→ Ссылка
успешно выполняется функция parseSource, хотя ее нет в интерфейсе IParserGetHtmlString
Зато метод есть в IParsePage
Автор решения: Ильнур Гильманов
→ Ссылка
Зависимость IParserGetHtmlString $parser - гарантирует что у объекта будет методы интерфейса, при этом совсем не важно какие методы могут быть у этой зависимости. Под зависимостью сейчас уже имею ввиду объект. $parser - это же объект, правильно? Интерфейс - это просто набор методов, которые обязательно должны быть у объекта.