Думайте об интерфейсе как о спецификации задания для проекта, это список вещей, которые должен иметь кусок кода, чтобы иметь возможность «работать» в его наиболее простой форме
Например, дляпользователь, есть 1 главное, что тебе действительно нужно больше всего на свете;вход в систему, так что мы можем посмотреть на это так:
<?php
interface iUser
{
function login($uname, $pword);
}
Это устанавливает основное правило для того, что ДОЛЖЕН иметь пользовательский класс, для чего мы можем создать класс, реализующий это;
class User implements iUser
{
public function login($uname, $pword)
{
/* code to login */
}
}
Теперь это не означает, что вам может не потребоваться больше функциональности за пределами вашего интерфейса, поскольку он там не актуален, но в вашем классе, например, у вас может быть onLoginCreateSession, как показано ниже ...
class User implements iUser
{
public function login($uname, $pword)
{
/* code to login */
onLoginCreateSession($uname); // Call this here in the event of successful login
}
private function onLoginCreateSession($uname)
{
/* set session variables for login success */
}
}
Основная причина, стоящая за интерфейсом, состоит в том, чтобы разрешить базовый набор правил для классов, которые могут быть похожими, но иметь другой рабочий набор для достижения чего-либо, например;
<?php
interface iCRUD
{
public function create (array $data);
public function read($recordid);
public function update(array $data);
public function delete($recordid);
}
Это простой интерфейс с 4-мя определениями функций, но когда мы его реализуем ...
class User implements iCrud
{
public function create (array $data)
{
// create to a user table using data
}
public function read($recordid)
{
// read from a user table using id
}
public function update(array $data)
{
// update user table based on data
}
public function delete($recordid)
{
// delete from user table using id
}
}
class Documents implements iCRUD
{
public function create (array $data)
{
// create to a documents table using data
}
public function read($recordid)
{
// read from a documents table using id
}
public function update(array $data)
{
// update documents table based on data
}
public function delete($recordid)
{
// delete from documents table using id
}
}
Вы можете видеть, как даже один и тот же интерфейс может использоваться для нескольких решений