ID: 18125
Updated by: [EMAIL PROTECTED]
Reported By: optikSmoke at subdimension dot com
-Status: Open
+Status: Closed
Bug Type: Zend Engine 2 problem
Operating System: Linux 2.4.18 (RedHat 7.3)
PHP Version: 5.0.0-dev
New Comment:
PHP5 doesn't support nested classes.
Previous Comments:
------------------------------------------------------------------------
[2003-04-18 17:39:17] thekid at thekid dot de
As namespaces have been rewritten entierly since this bug was reported,
I think what's still left of this is:
namespace foo {
class bar { }
}
$name= 'foo::bar';
$o= new $name();
Results in:
Fatal error: Class 'foo::bar' not found
eval('$o= new '.$name.'();'); is ugly but works.
------------------------------------------------------------------------
[2002-07-04 01:14:52] bob at bravenet dot com
The problem exists in the internal handling of :: within classnames.
Here is another example of the same problem in a different context. In
this case...when using the classname within a variable, PHP isnt able
to find the class.
<?
class App {
function CreateObject($classname) {
return new $classname;
}
}
class App::Client {
function __construct()
{
echo 'In App::Client constructor';
}
}
class Client {
function __construct()
{
echo 'In Client constructor';
}
}
App::CreateObject('Client');
App::CreateObject('App::Client');
?>
------------------------------------------------------------------------
[2002-07-02 23:41:11] optikSmoke at subdimension dot com
Essentially, I have run into this problem: I am unable to
use the '::' operator to define a class within a namespace
or inherit from a class within another namespace (I am
using 4.3.0-alpha2).
Example:
<?
class Boo {
class Scream {
}
}
class Boo::Ahh extends Boo::Scream {
}
?>
This will generate a "expecting ''{'' on line 7" parser
error (the "class Boo::Ahh ....." line). Similarly, "class
Biff extends Boo::Scream {}" and "class Biff::Ahh extends
Boo {}" (or any other definitions in these forms) will
generate the same error. It appears to me that any class
definitions that use the :: operator and the extends
clause will generate this error.
I have found this to be a problem that is particularly
annoying, as I am developing a set of library classes that
reside within specific namespaces, in seperate files. For
example, I would like to be able to create a namespace
"Foo" containing class "Bar" and its child class "Biff",
both in seperate files so scripts not utililizing "Biff"
need not load it.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=18125&edit=1