From e497d4d08d6a7e5ee46c6bc36713853c536a6dc7 Mon Sep 17 00:00:00 2001 From: Curt Zirzow <curt@php.net> Date: Mon, 2 Aug 2004 03:12:59 +0000 Subject: [PATCH] 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 --- language/oop5/abstract.xml | 51 +++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/language/oop5/abstract.xml b/language/oop5/abstract.xml index bc8b050812..d5c336951d 100644 --- a/language/oop5/abstract.xml +++ b/language/oop5/abstract.xml @@ -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>