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:
Curt Zirzow 2004-08-02 03:12:59 +00:00
parent 5fe0c7a5b2
commit e497d4d08d

View file

@ -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>