How about testing for the parent?  Such as:

<?

class AbstractClassException { }

 class MyClass
 {
  var $salutation;

    function MyClass()
    {
  if(!get_parent_class($this))
  {
         throw new AbstractClassException();
        }

        $this->salutation = 'Hello';
    }

 function test()
 {
  print($this->salutation);
 }
 }

class MyOtherClass extends MyClass
{
 function MyOtherClass()
 {
  MyClass::MyClass();
 }
}

//use the abstract class correctly
$c = new MyOtherClass;
$c->test();

//use it incorrectly, get an exception
$c = new MyClass;

?>

Regards,
Leon


----- Original Message -----
From: "Jens Rehsack" <[EMAIL PROTECTED]>
To: "Andrei Zmievski" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Saturday, November 09, 2002 8:22 AM
Subject: Re: [PHP-DEV] abstract functions


> Andrei Zmievski wrote:
> > ZE1 way:
> >
> >  class MyClass {
> >     function MyClass()
> >     {
> >          die('MyClass is an abstract class');
> >     }
> >  }
> >
> > ZE2 way:
> >
> >  class AbstractClassException {
> >  }
> >
> >  class MyClass {
> >     function MyClass()
> >     {
> >         throw new AbstractClassException();
> >     }
> >  }
> >
> > On Sat, 09 Nov 2002, Jens Rehsack wrote:
>
> That's not ok, cause (very simple)
> class Calcer
> {
>    function Calcer() { die('abstract'); }
>    function ShowResult( $a )
>    {
>      echo $this->CalcResult( $a )
>    }
>    abstract function CalcResult( $a );
> }
>
> class Square extends Calcer
> {
>    function Square()
>    {
>      Calcer::Calcer(); // cause inherited could do sth.
>    }
>
>    function CalcResult( $a )
>    {
>      return $a * $a;
>    }
> }
>
> class Adder extends Calcer
> {
>    var $Summand;
>
>    function Adder( $aSummand )
>    {
>      Calcer::Calcer();
>      $this->Summand = $aSummand;
>    }
>
>    function CalcResult( $a )
>    {
>      return $a + $this->Summand;
>    }
> }
>
> I can give a more complex example, if you want, but it's not ok to die
> in constructor of an abstract class, cause the main logic could be
> implemented in this class and it needs to be derived cause for helper
> functions...
>
> An example is a cache control class which is able to access cached
> objects through it real name and is either able to store in filesystem
> or in database.
>
> Jens
> >>Hi,
> >>
> >>does PHP4 with the ZE2 supports abstract function like Delphi or C++?
> >>That would be very useful for class development, cause we can avoid
> >>testing if a class is abstract if an abstract class couldn't be
> >>instantiated?
> >>
> >>Syntax could be like in C++
> >>class X
> >>{
> >>  X(){}
> >>  int y() = 0;
> >>}
> >>
> >>or little bit more like pascal
> >>
> >>class X
> >>{
> >>  X(){} // PHP
> >>  function x(); abstract;
> >>}
> >>
> >>or
> >>
> >>class X
> >>{
> >>  X(){} // PHP
> >>  abstract function x();
> >>}
> >>
> >>Greetings,
> >>Jens
> >>--
> >>L     i  W     W     W  i                 Jens Rehsack
> >>L        W     W     W
> >>L     i   W   W W   W   i  nnn    gggg    LiWing IT-Services
> >>L     i    W W   W W    i  n  n  g   g
> >>LLLL  i     W     W     i  n  n  g   g    Friesenstraße 2
> >>                                  gggg    06112 Halle
> >>                                     g
> >>                                 g   g
> >>Tel.:  +49 - 3 45 - 5 17 05 91    ggg     e-Mail: <[EMAIL PROTECTED]>
> >>Fax:   +49 - 3 45 - 5 17 05 92            http://www.liwing.de/
> >>
> >>
> >>--
> >>PHP Development Mailing List <http://www.php.net/>
> >>To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >
> >
> >
> > -Andrei                                       http://www.gravitonic.com/
> > * A feature is a bug with seniority. *
> >
> >
>
>
>
> --
> L     i  W     W     W  i                 Jens Rehsack
> L        W     W     W
> L     i   W   W W   W   i  nnn    gggg    LiWing IT-Services
> L     i    W W   W W    i  n  n  g   g
> LLLL  i     W     W     i  n  n  g   g    Friesenstraße 2
>                                    gggg    06112 Halle
>                                       g
>                                   g   g
> Tel.:  +49 - 3 45 - 5 17 05 91    ggg     e-Mail: <[EMAIL PROTECTED]>
> Fax:   +49 - 3 45 - 5 17 05 92            http://www.liwing.de/
>
>
>
> --
> PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, visit: http://www.php.net/unsub.php
>


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to