Try var_dump($GrandChildClass) or print_r($GrandChildClass) everytime you need to inspect variable content. Not echo...

PS: Hi there Vietnamese guy, same here ;)

Chris wrote:
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



Reply via email to