|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2004-10-16 02:06 UTC] 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
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Nov 08 03:00:01 2025 UTC |
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 {} ?>"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