|
|
|
| не могу понять, с какой целью создаются интерфейсы
есть, например 2 фрагмента:
<?php
interface Int
{
function one();
function two();
}
class classOne implements Int
{
function one()
{
echo 1;
}
function two()
{
echo 2;
}
}
$obj=new classOne;
$obj->one();
?>
|
и такой
<?php
class classOne
{
function one()
{
echo 1;
}
function two()
{
echo 2;
}
}
$obj=new classOne;
$obj->one();
?>
|
Результат один. Так для чего создаются интерфейсы? | |
|
|
|
|
|
|
|
для: beowulf
(14.01.2006 в 17:27)
| | Во втором случае, вы можете не определять методы one() и two(), в первом случае это уже не получится. Любой класс расширяющий интерфейс Int обязан определить методы входящие в интерфейс. Это позволяет продиктовать для большого числа будующих классов имена методов, что позволит унифицировать программный интерфейс - иначе разработчики их назовут кто в лес, кто по дрова: one и two, first и second, begin и end, first и last и т.п. Когда будет классов 50 будет невозможно запомнить где какие методы пременяются, чтобы этого избежать придуманы интерфейсы. | |
|
|
|
|
|
|
|
для: cheops
(15.01.2006 в 00:44)
| | Проще объяснить на примере, у нас есть три класса:
<?php
class a {
function exec() {
return false;
}
}
class b {
function exec() {
return $this->check();
}
private function check() {
return 5 > 1;
}
}
class c {
function __constructor($obj) {
$obj->exec();
}
}
?>
|
Конструктор класса "c" принимает в качестве параметра объект класса "a" или "b". Но как проконтролировать что передан объект одного из этих классов? Ведь объект передать можно любой, в котором даже нет метода exec() или он выполняет другие задачи. Для этого классы "a" и "b" надо как-то "соединить". Для этого и применяются интерфейсы.
<?php
interface BooleanExec {
function exec();
}
class a implements BooleanExec {
function exec() {
return false;
}
}
class b implements BooleanExec {
function exec() {
return $this->check();
}
private function check() {
return 5 > 1;
}
}
class c {
function __constructor(BooleanExec $obj) {
$obj->exec();
}
}
?>
|
Теперь в сочетании с typehint мы можем гарантировать что будет передан правильный объект. | |
|
|
|