mirror of
https://github.com/sigmasternchen/php-doc-en
synced 2025-03-16 00:48:54 +00:00
Clarify what an abstract class can and cannot do, with example.
git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@164916 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
parent
5fe0c7a5b2
commit
e497d4d08d
1 changed files with 37 additions and 14 deletions
|
@ -1,13 +1,14 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision: 1.2 $ -->
|
||||
<!-- $Revision: 1.3 $ -->
|
||||
<sect1 id="language.oop5.abstract">
|
||||
<title>Object Abstraction</title>
|
||||
|
||||
<para>
|
||||
PHP 5 introduces abstract classes and methods. An abstract
|
||||
method only declares the method's signature and does not provide an
|
||||
implementation. A class that contains abstract methods needs to be declared
|
||||
abstract.
|
||||
PHP 5 introduces abstract classes and methods. It is not allowed to create
|
||||
an instance of a class that has been defined as abstract. Any class that
|
||||
contains at least one abstract method must also be abstract. Methods
|
||||
defined as abstract simply declare the method's signature they cannot
|
||||
define the implementation.
|
||||
</para>
|
||||
|
||||
<example>
|
||||
|
@ -15,26 +16,48 @@
|
|||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
abstract class AbstractClass {
|
||||
abstract public function test();
|
||||
}
|
||||
|
||||
class ImplementedClass extends AbstractClass {
|
||||
public function test() {
|
||||
echo "ImplementedClass::test() called.\n";
|
||||
/* Force Extending class to define this method */
|
||||
abstract protected function getValue();
|
||||
|
||||
/* Common method */
|
||||
public function print() {
|
||||
print $this->getValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$o = new ImplementedClass;
|
||||
$o->test();
|
||||
class ConcreteClass1 extends AbstractClass {
|
||||
|
||||
protected function getValue() {
|
||||
return "ConcreteClass1";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ConcreteClass2 extends AbstractClass {
|
||||
|
||||
protected function getValue() {
|
||||
return "ConcreteClass2";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$class1 = new ConcreteClass1;
|
||||
$class1->print();
|
||||
|
||||
$class2 = new ConcreteClass2;
|
||||
$class2->print();
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
|
||||
<para>
|
||||
Abstract classes cannot be instantiated. Old code that has no user-defined
|
||||
classes or functions named 'abstract' should run without modifications.
|
||||
Old code that has no user-defined classes or functions named
|
||||
'abstract' should run without modifications.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
|
Loading…
Reference in a new issue