Re: Abstract Classes?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



nicely put.

Oliver Grätz wrote:
GamblerZG schrieb:

But what benefit is there is having it as an explicitly "abstract"
class? Why can't it just be a "normal" class definition which you
inherit from?

The idea is that a high-level language should prohobit you from doing things that do not make sence. Why they implemented it in PHP? Because it's there in Java, I guess.


No, it's there because it makes sense.
If you derive from an abstract class the mechanism forces you to
implement the abstract methods. Think of this:

class Super
{
  public function check() {} //no code!
  public function huba()
  {
    /* code */
    $this->check(); // use of method
  }
}
class MyClass extends Super {}

This is what you do without having abstract classes. You put an empty
method into the class. You rely on remembering that test() has to be
filled with meaning in the subclass. You are even allowed to forget
implementing check() which might get you into trouble because the
check() is what you meant to be called for ensuring the data integrity
of the data you intend to use a few lines later.

Or worse: You leave out the method in the superclasse and only state in
the documentation that there has to be a check() method in subclasses.
This is the way to forgetting to implement all kinds of stuff.

So there is this mechanism called "abstract class":

abstract class Super
{
  abstract public function check();
  public function huba()
  {
    /* code */
    $this->check(); // use of method
  }
}
class MyClass extends Super {}

Now, you enforce several things:
- Super cannot be instantiated.
  It is not complete and PHP knows about this.
- MyClass is not complete until you implement a check().
  This way you have to actively say "I don't need a check."
  by putting an empty check() into MyClass.

Even better: You can decide to implement just some of the abstract
methods of Super. Then PHP forces you to declare your subclass as
abstract, too. This allows for partially complete class trees and it is
not up to you to remember which classes are ready to use and which are not.

No, abstract classes are not just there "because Java has them", they
exits because they help you in managing your code repository and because
they prohibit you from doing stupid things with the code.

OLLi


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux