Вопрос по интерфейсам

xakzona

Новичок
Вопрос по интерфейсам

есть интерфейс
interface interfaceComponent{
function show();
}
класс 1
class asd1 implements interfaceComponent{
function show($param1){...}
}

класс 2
class asd2 implements interfaceComponent{
function show($param1,$param2){...}
}

Как видите - как сделать интерфейс, на основе которого классы могли создавать методы с переменным кол-вом параметров как в примере.
Так ясно дело ругается типа метод класса не совместим с методом интерфейса
 

xakzona

Новичок
не прет

-~{}~ 28.10.08 20:10:

Не работает - пишет тоже самое типа метод класса не совместим с методом интерфейса
 

Farsh

~ on ~ high ~ wave ~
в интерфейсе пишешь, что параметр - array $array,
а в методы класса передаешь массив
 

Angerslave

Новичок
xakzona
А ты как себе представляешь поведение интерпретатора при конструкция вида
PHP:
<?php

$a = new asd1();
$a->show(1); // Выкидывать несовместимость с интерфейсом здесь?

$b = new asd2();
$b->show(1,2); // или здесь?
А ведь по сути, оба метода действительно не совместимы с интерфейсом - по интерфейсу в метод не предполагается передавать никаких параметров. Возможно, отца русской демократии спасут $param1 = 1, $param2 = 2...
 

xakzona

Новичок
А как необходимо написать интерфейс чтоб был корректен для методов обоих классов?
 

Angerslave

Новичок
xakzona
Что-то мне думается, что этот метод очень слабо связан с интерфейсом. Или классы слабо относятся к интерфейсу. Или, если прям так прёт передавать произвольное количество параметров, то юзай массив. Но это только в случае, если ты убедишься, что абстракция верная.
 

demon_goo

Новичок
PHP:
interface ABC
{
	public function show();
}

class cABC1 implements ABC
{
	public function show($p = NULL)
	{
		echo get_class($this);
	}
}

class cABC2 implements ABC
{
	public function show($p1 = NULL, $p2 = NULL)
	{
		echo get_class($this);
	}
}

$a = new cABC1();
$b = new cABC2();
$a->show(1);
$b->show(1, 2);
Единственный момент что придется проверять вручную наличие параметров.
 
Сверху