Jump to content
  • 0

Интерфейсы


Иван Шумов
 Share

Question

вот такой вопрос - в ООП в PHP есть такое понятие как интерфейсы, только вот все никак не могу понять в чем их плюс, поскольку с простым наследованием классов все выглядит короче, а интерфесы словно просто оглавление для класса %) В чем же сила интерфейсов?

Link to comment
Share on other sites

Recommended Posts

  • 0

Модульность. Ты дикларируешь, что готов работать с любым классом если он удовлетворяет определенным требоваяним и тебе без разницы, какова реализация этого класса и кто его будет делать.

Link to comment
Share on other sites

  • 0

вот пример из одной книги

<?php
class DrawingEnvironment
{
private $img = null;
private $x = null;
private $y = null;
private $colors = array();

public function __construct( $x, $y )
{
$this->img = imagecreatetruecolor( $x, $y );

$this->addColor( 'white', 255, 255, 255 );
$this->addColor( 'black', 0, 0, 0 );
$this->addColor( 'red', 255, 0, 0 );
$this->addColor( 'green', 0, 255, 0 );
$this->addColor( 'blue', 0, 0, 255 );

imagefilledrectangle( $this->image(),
0, 0, $x, $y, $this->color( 'white' ) );
}

public function image() { return $this->img; }
public function size_x() { return $this->x; }
public function size_y() { return $this->y; }
public function color( $c ) { return $this->colors[$c]; }

public function save( $file )
{
imagepng( $this->img, $file );
}

protected function addColor( $name, $r, $g, $b )
{
$col = imagecolorallocate($this->img, $r, $g, $b);
$this->colors[ $name ] = $col;
}
}

interface DrawingObject
{
function drawObject( $env );
function setParam( $name, $value );
}

function loadModules( $dir )
{
$classes = array();

$dh = new DirectoryIterator( $dir );
foreach( $dh as $file )
{
if( $file->isDir() == 0 && preg_match( "/[.]php$/", $file ) )
{
include_once( $dir."/".$file );
$class = preg_replace( "/[.]php$/", "", $file );
$classes []= $class;
}
}

return $classes;
}

$classes = loadModules( "mods" );

$dom = new DOMDocument();
$dom->load( $argv[1] );
$nl = $dom->getElementsByTagName( "image" );
$root = $nl->item( 0 );

$size_x = $root->getAttribute( 'x' );
$size_y = $root->getAttribute( 'y' );
$file = $root->getAttribute( 'file' );

$de = new DrawingEnvironment( $size_x, $size_y );

$obs_spec = array();

$el = $root->firstChild;
while( $el != null )
{
if ( $el->tagName != null )
{
$params = array();
for( $i = 0; $i < $el->attributes->length; $i++ )
{
$p = $el->attributes->item( $i )->nodeName;
$v = $el->attributes->item( $i )->nodeValue;
$params[ $p ] = $v;
}

$obs_spec []= array(
'type' => $el->tagName,
'params' => $params
);
}
$el = $el->nextSibling;
}

foreach( $obs_spec as $os )
{
$ob = null;
eval( '$ob = new '.$os['type'].'();' );
foreach( $os[ 'params' ] as $key => $value )
$ob->setParam( $key, $value );
$ob->drawObject( $de );
}

$de->save( $file );
?>

Link to comment
Share on other sites

  • 0

Судя по всему вышесказанному думается (как минимум), что (1) SPL'ем никто не пользуется, (2) с языками кроме как php здесь никто не имел серьёзного опыта работы.

Посему очень рекомендую к изучению литературу по java (или c#).

Link to comment
Share on other sites

  • 0

LokiDi L0ck я не собираюсь становиться c# или жаба-кодером. Меня интересновало имеет ли кто-либо здесь представление о пользе интерфейсов ООП именно PHP поскольку я являюсь именно веб-разработчиком и позиционирую себя как PHP-программиста. Видно нет ребят тут забравшихся в эти глубины - видно я один из первых тут таких ... прийдется опять самому думать <_<

Link to comment
Share on other sites

  • 0
я не собираюсь становиться c# или жаба-кодером

Никто не заставляет.

Но видимо придётся пояснить. Я не призываю к изучению вышеперечисленных языков. Вам ничто не мешает посмотреть главы только о интерфейсах, там прекрасно объясняют зачем, где и когда их использовать.

Видно нет ребят тут забравшихся в эти глубины

Ого. Не знал, что использование интерфейсов - это глубины.

Всегда использовал их так, как и любые другие простейшие возможности php.

Link to comment
Share on other sites

  • 0

кажу пару слов

Лап, вспомни другие языки, не знаю, тот же паскаль аля пример, там определение функций, которые увидит пользователь, подключив модуль, описывается в интерфейсе модуля, моя имха, что в пхп пришли к тому же методу, правда я до сих пор не осилил что они от этого поимели.

private/public(protected, etc. не для пхп) в структуре класса то же самое, но гораздо удобнее. ну а если уж решили полностью сделать копию сей... ну не так же примитивно %)

Edited by NJSmith
Link to comment
Share on other sites

  • 0

>Вот что значит "Познание

ООП средствами php".

Печально это всё.

Ну так подскажи хороший мануальчик

В книге д.котерова, пхп5, раскрыта тема интерфейсов, как я понял они используются для 'несанкционого' вызова методов, которые не обявлены в интерфейсе для класа из из которого вызываются эти методы Если интерфейс описан, то те методы, которые в нем отсутствуют просто игнорируются или пхп выдает ошибку, точно не помню)

Поправьте меня если я не прав)))

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy