php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #30453 php parser does not work properly (2)
Submitted: 2004-10-16 02:06 UTC Modified: 2005-08-09 13:56 UTC
Votes:15
Avg. Score:4.3 ± 0.9
Reproduced:11 of 12 (91.7%)
Same Version:4 (36.4%)
Same OS:4 (36.4%)
From: guth at fiifo dot u-psud dot fr Assigned: dmitry (profile)
Status: Wont fix Package: Scripting Engine problem
PHP Version: 5CVS-2005-06-19 OS: *
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [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

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-05-09 11:31 UTC] sniper@php.net
Andi, (or Dmitry maybe?) can you look into this?

 [2005-06-19 14:44 UTC] sniper@php.net
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-07-28 12:06 UTC] xuefer at 21cn dot com
"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
 [2005-08-09 13:56 UTC] dmitry@php.net
Interfaces and classes should be defined before they are used. PHP4 supported later declaration with classes, and PHP5 supports it for backward compatibility, but we don't plan support for all compinations.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Apr 30 04:01:30 2024 UTC