php-doc-en/language/oop5/interfaces.xml
Curt Zirzow 716ae95281 Fix bug #30201
git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@169017 c90b9560-bf6c-de11-be94-00142212c4b1
2004-09-23 01:30:05 +00:00

99 lines
2.5 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.5 $ -->
<sect1 id="language.oop5.interfaces">
<title>Object Interfaces</title>
<para>
Object interfaces allow you to create code which specifies which methods a
class must implement, without having to define how these methods are
handled.
</para>
<para>
Interfaces are defined using the interface keyword, in the same way as a
standard class, but without any of the methods having their contents
defined. Classes which implement an interface should do so using the
implements keyword, and must have definitions for all the methods listed
in the interface. Classes may implement more than one interface if desired
by listing each interface split by a comma.
</para>
<para>
All methods declared in an interface must be public, this is the nature of an
interface.
</para>
<para>
Stating that a class implements an interface, and then not implementing all
the methods in the interface will result in a fatal error telling you which
methods have not been implemented.
</para>
<example>
<title>Interface example</title>
<programlisting role="php">
<![CDATA[
<?php
// Declare the interface 'iTemplate'
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
// Implement the interface
// This will work
class Template implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
public function getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
// This will not work
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
}
?>
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->