Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Интерфейс implements (https://javascript.ru/forum/server/37028-interfejjs-implements.html)

super-php 04.04.2013 21:50

Интерфейс implements
 
Не работает почему то интерфейс

<?php
interface A
{
	public function d();
}

interface B
{
	public function m();
}

class B implements A,B 
{
public	function d(){
	echo 'Привет!';
	}
	
public	function m(){
		echo 'Клоун!';
	}
}

$a = new B;
$a->d();
$a->m();
?>

danik.js 04.04.2013 21:59

Цитата:

Сообщение от super-php
Не работает почему то интерфейс

А разве он должен как-то работать?

super-php 05.04.2013 15:15

Исправил, вот другой пример.
Пример с интерфейсом, по книге вроде должно пахать, но чего-то не пашет. Не получается расширить интерфейс, как в книге пишется что можно расширять.

<?php ## Множественное наследование интерфейсов. 
// Сущность: "материальный объект", 
interface IWorldObject { 
public function getCoord(); // возвращает координаты объекта 
// Обратите внимание, тело метода не указывается! 
} 
// Сущность: "устройство с колесами", 
interface IWheeled { 
public function getNumWheels(); // возвращает число колес 
} 
// Сущность: "транспортное средство". ВНИМАНИЕ: при расширении 
// интерфейсов нужно использовать ключевое слово extends, а не 
// implements! Конечно, допустимо множественное расширение. 
interface ITransport extends IWorldObject { 
public function getNumPassengers(); // максимальное число пассажиров 
} 
// "Запорожец" — это: транспортное средство с колесами, существующее 
//в материальном мире, 
class Zaporojets implements ITransport, IWheeled, IWorldObject { 
private $coordArray; 
public function getCoord() { return $coordArray; } 
public function getNumWheels() { return 4; } 
public function getNumPassengers() { return 16; } 
// Также нужно определить конструктор, деструктор и другие методы. 
} 
?>


Код:

Fatal error: Class Zaporojets cannot implement
 previously implemented interface IWorldObject
 in D:\server\super-php\test.ru\www\index.php on line 19


devote 05.04.2013 15:23

Цитата:

Сообщение от super-php
class Zaporojets implements ITransport, IWheeled, IWorldObject {

а зачем тут писать IWorldObject ? Если ITransport и так от него наследуется? Удалите из implements IWorldObject:
class Zaporojets implements ITransport, IWheeled {
}
и все должно работать

danik.js 05.04.2013 15:25

Ежу понятно, ITransport уже включает в себя IWorldObject.
Поэтому реализуя ITransport, мы реализуем и IWorldObject, поэтому его отдельно не нужно прописывать.
А вобще, я с интерфейсами никогда не работал (в PHP). Так что может я не прав. Я просто попытался рассудить.

super-php 05.04.2013 15:26

Вложений: 1
Если удалить, просто пустой экран при выводе. Кстати вот код, который не работает

devote 05.04.2013 15:28

Цитата:

Сообщение от super-php
Если удалить, просто пустой экран при выводе

а что вы ожидаете? вы же просто обяъвили классы/интерфейсы.. а экземляры и вызов методов Вася делать должен? или PHP за вас додумается что запускать?

super-php 05.04.2013 15:32

Вот сделал экземпляр класса и методы повызывал, все равно пустой экран.

$a = new Zaporojets;
$a->getCoord();
$a->getNumWheels();
$a->getNumPassengers();

devote 05.04.2013 15:34

Цитата:

Сообщение от super-php
Вот сделал экземпляр класса и методы повызывал, все равно пустой экран.

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


Часовой пояс GMT +3, время: 11:10.