$r->getSides(6,2);
Ваш абстрактный класс требует трех аргументов! Плюс функция на самом деле является методом установки. Вы должны назвать его setSides () ;. То же самое с getCoordinates ().
Обновление : Я думаю, вы путаете наследование с перегрузкой. Вот пример для перегрузки с помощью __call. Я предполагаю, что это не то, что вы пытаетесь сделать, а то, что вы имеете в своем примере. Может быть, это поможет.
abstract class overloadTestAbstract {
public function printOne($show) {
echo __METHOD__ . ': ' . $show . '<br />';
}
}
class overloadTestOne extends overloadTestAbstract {
public function __call($method,$arguments) {
$methods = array('printOne','printTwo','printThree');
if ( in_array($method,$methods) ) {
echo __METHOD__ . ' :OVERLOAD METHOD: ' . $arguments[0] . '<br />';
} else {
echo 'We are so sorry, but this method is available';
}
}
public function printTwo($show) {
echo __METHOD__ . ': ' . $show . '<br />';
}
}
Тогда, если вы сделаете это:
$test = new overloadTestOne();
$test->printOne('Hello World');
$test->printTwo('Goodbye World');
$test->printThree('Hello World, again');
$test->printFour('Goodbye World, again');
вы получите это
// print results
'overloadTestAbstract::printOne: Hello World'
'overloadTestOne::printTwo: Goodbye World'
'overloadTestOne::__call :OVERLOAD METHOD: Hello World, again'
'We are so sorry, but this method is available'
Хотя у меня есть printOne и printTwo в перегрузке __call как принятые методы, они не используются, потому что эти методы уже определены, они обрабатываются существующими методами, как и ожидалось. С другой стороны, printThree перегружается, потому что метод не существует. То же самое с printFour, но этот метод не предназначен для вывода аргумента. Массив, который вы определили с помощью принятых методов, ничего не делает. Это просто массив. Вы должны назначить какое-то задание этим методам или вернуть ошибку, как я.