ID: 30453
Comment by: xuefer at 21cn dot com
Reported By: guth at fiifo dot u-psud dot fr
Status: Assigned
Bug Type: Scripting Engine problem
Operating System: *
PHP Version: 5CVS-2005-06-19
Assigned To: dmitry
New Comment:
"extends" a parent class is exactly same when you want to "new" a
class
module.php:
// compile time binding (but "include" is "runtime")
<?php class module {} ?>
Does not work:
<?php
include 'module.php';
// runtime binding: undefined GroupModule now
// if you do "$a = new GroupModule();", same error
class ClassGroupModule extends GroupModule {}
// runtime binding
class GroupModule extends Module {}
?>
But this works:
<?php
// compile time binding
class Module {}
// runtime binding, GroupModule defined at compile time: OK
// you can "$a = new GroupModule();" here also
class ClassGroupModule extends GroupModule {}
// compile time binding
class GroupModule extends Module {}
?>
And this works:
<?php
include 'module.php';
// runtime binding
class GroupModule extends Module {}
// runtime binding
class ClassGroupModule extends GroupModule {}
?>
compile time -> runtime
this might be hard for php user to figure it out. improve document
should be enough, i guess
Previous Comments:
------------------------------------------------------------------------
[2005-06-19 14:44:43] [EMAIL PROTECTED]
module.php:
<?php class module {} ?>
Does not work:
<?php
include 'module.php';
class ClassGroupModule extends GroupModule {}
class GroupModule extends Module {}
?>
But this works:
<?php
class Module {}
class ClassGroupModule extends GroupModule {}
class GroupModule extends Module {}
?>
And this works:
<?php
include 'module.php';
class GroupModule extends Module {}
class ClassGroupModule extends GroupModule {}
?>
------------------------------------------------------------------------
[2005-05-09 11:31:13] [EMAIL PROTECTED]
Andi, (or Dmitry maybe?) can you look into this?
------------------------------------------------------------------------
[2004-10-16 02:06:37] guth at fiifo dot u-psud dot fr
Description:
------------
Look at the following code...
Note that there is no difference between the first case and the third
case. I just add an include in the first case.
Reproduce code:
---------------
test3.php :
<?php
include "test4.php";
class ClassGroupModule extends GroupModule implements GroupInterface {
}
abstract class GroupModule extends Module { }
?>
<?php
include "test4.php";
class ClassGroupModule extends GroupModule implements GroupInterface {
}
abstract class GroupModule { }
?>
<?php
abstract class Module { }
interface GroupInterface { }
class ClassGroupModule extends GroupModule implements GroupInterface {
}
abstract class GroupModule extends Module { }
?>
test4.php
<?php
abstract class Module { }
interface GroupInterface { }
?>
Expected result:
----------------
Case 1 :
- Should work
Case 2 :
- Should work
Case 3 :
- Should work
Actual result:
--------------
Case 1 :
Fatal error: Class 'GroupModule' not found in /www/test3.php on line 4
Case 2 :
- Works fine
Case 3 :
- Works fine
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=30453&edit=1