Because /$GrandChildClass;/ Is an object. So when you go to echo it, PHP
tries to convert it to a string.
Pham Cong Dinh wrote:
Hi all,
I tested Chris's code:
<?php
class *ParentClass*
{
function __construct()
{
echo 'ParentClass::__construct()',"\r\n";
}
}
class *ChildClass *extends ParentClass
{
/*
function __construct()
{
parent::__construct();
echo 'ChildClass::__construct()',"\r\n";
}
//*/
}
class *GrandChildClass *extends ChildClass
{
function __construct()
{
parent::__construct();
echo 'GrandChildClass::__construct()',"\r\n";
}
}
$GrandChildClass = new GrandChildClass();
echo $GrandChildClass;
?>
It resulted:
ParentClass::__construct()
GrandChildClass::__construct()
Object id #1
Could anyone kindly tell me why the string "Object id #1" is printed?
Thanks
Dinh
Chris wrote:
FrzzMan wrote:
Hi guys, hey don't laugh at the subject, in fact I don't what to
call it, so let's call it super constructor :D
Let's see following code...
class Base
{
__construct()
{
// Do something
}
}
class One extends Base
{
__construct()
{
// Do nothing
}
}
class OneMore extends One
{
__construct()
{
// Do things :D
}
}
So when I create an instance of OneMore class by:
$OneMoreInstance = new OneMore()
The __construct() method of class OneMore will be called, not the
one of One and Base, right?
So is there any way around to make the Base class have a contructor
that will be called everytime one of its child initialize?
My problem, I want all of the classes in my object are extend from
one base class, so they are all have some common properties and
function, but PHP won't implicit call the contructor (that's the
right way)... btw, in my case, this is bad, as bad as every
constructor would be called...
Well, hope you understand what I'm trying to say...
I'm not positive I understand you correctly, but I think this will
answer your question.
Example Classes:
class ParentClass
{
function __construct()
{
echo 'ParentClass::__construct()',"\r\n";
}
}
class ChildClass extends ParentClass
{
/*
function __construct()
{
parent::__construct();
echo 'ChildClass::__construct()',"\r\n";
}
//*/
}
class GrandChildClass extends ChildClass
{
function __construct()
{
parent::__construct();
echo 'GrandChildClass::__construct()',"\r\n";
}
}
__construct is just like any other method, if you overload it
(redefine it in a child class), the parent method will not be called
automatically, so, if you want the functionality of both, you can
call the parent constructor from the childs constructor. If the
direct parent doesn't have a constructor, the next parent's
constructor is checked and so on.
In the above example when defining a GrandChildClass, its constructor
and the ParentClass::__construct() are will both run. If you
uncomment ChildClass::__construct(), it will run as well.
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php