Edit report at https://bugs.php.net/bug.php?id=51826&edit=1

 ID:                 51826
 Comment by:         j dot henge-ernst at interexa dot de
 Reported by:        1000235409 at smail dot shnu dot edu dot cn
 Summary:            maybe a wrong oop logic.
 Status:             Open
 Type:               Bug
 Package:            Class/Object related
 Operating System:   WINDOWS
 PHP Version:        5.3SVN-2010-05-14 (SVN)
 Block user comment: N
 Private report:     N

 New Comment:

Seems to be fix with PHP 5.3.9


Previous Comments:
------------------------------------------------------------------------
[2010-05-22 16:21:23] 1000235409 at smail dot shnu dot edu dot cn

<?php
abstract class TAbstractParam {
  protected $FValue = null;
  public abstract function getType(); //getType
  public function Dump() {
    return "TYPE=" . $this->getType() . " VALUE=" . $this->FValue;
  }
}

interface IParam {
  public function getType(); //getType again.
}

class TStringParam extends TAbstractParam implements IParam {
  public function getType() {return 'VARCHAR'; } //another getType, the fatal 
error goes here.
}


see this example, please...

------------------------------------------------------------------------
[2010-05-18 01:35:34] 1000235409 at smail dot shnu dot edu dot cn

there are other non-abstract methods inside the abstract class to provide some 
base behaviors for its children claclasses, which i omitted in this example. 
and those non-abstract methods may call the abstract methods. and an abstract 
class should not be defdefined as an instance cclass for an interface cuz an 
non-abstract one should, so why ambiguity?

------------------------------------------------------------------------
[2010-05-17 19:51:45] crrodriguez at opensuse dot org

Expected behaviour, your code causes ambiguity.

------------------------------------------------------------------------
[2010-05-14 17:42:35] 1000235409 at smail dot shnu dot edu dot cn

I have adapted those code(see it below) into delphi(object pascal, on 
Delphi2010), however, nothing wrong at all. so i think it should be a wrong oop 
logic in php5(5.2 included also, since i've tested then...)

Type
  TAbstractParam = Class(TInterfacedObject)
    Procedure getType(); Virtual; Abstract;
  End;

  IParam = Interface
    Procedure getType();
  End;

  TPrimativeParam = Class(TAbstractParam, IParam)
    Procedure getType();
  End;
//Other code omitted...

------------------------------------------------------------------------
[2010-05-14 17:15:02] 1000235409 at smail dot shnu dot edu dot cn

Description:
------------
A fatal error generates when a class extends from an abstract class and 
implements 
from an interface both with a same named abstract (all methods defined inside 
interfaces are abstract) method inside.

Test script:
---------------
<?php
abstract class TAbstractParam {
  public abstract function getType(); //getType
}

interface IParam {
  public function getType(); //getType again.
}

class TPrimativeParam extends TAbstractParam implements IParam {
  public function getType() {return 'VARCHAR'; } //another getType, the fatal 
error goes here.
}

Expected result:
----------------
[just nothing...]


Actual result:
--------------
Fatal error: Can't inherit abstract function IParam::getType() (previously 
declared abstract in TAbstractParam) in E:\foo.php on line 10


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=51826&edit=1

Reply via email to