Re: Scope woe
| From: | Peter Ford | Date: | Tue, 30 Jun 2009 12:43:42 +0000 |
| Subject: | Re: Scope woe | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-294735@lists.php.net to get a copy of this message | ||
Luke wrote:
> Hello again guys,
>
> I was wondering the best way to tackle the following problem:
>
> I've got a class, containing a property which is another object. So from
> outside I should be able to do
> $firstobject->propertycontainingobject->methodinsidethatobject();
>
> The $firstobject variable is in the global namespace (having been made with
> $firstobject = new FirstObject;), and I'm having a problem that I'm sure
> many people have when accessing it inside another class, so:
>
> class otherObject
> {
> static function messwithotherthings ()
> {
> $firstobject->propertycontainingobject->methodinsidethatobject();
> }
> }
>
> But $firstobject is blank, which makes sense because in there it is pointing
> to the local variable within the method.
>
> To solve this, I could add 'global $firstobject' inside every method, but
> this is very redundant and boring. I've tried a couple of things like
> adding:
>
> private $firstobject = $GLOBALS['firstobject'];
>
> But apparently that's bad syntax. I was just wondering the best way to get
> around this?
>
> Thanks a lot for your help,
>
Set the value of $firstobject in the constructor of otherObject (that's what
constructors are for!):
eg.
class otherObject
{
private $firstobject;
function __construct()
{
$this->firstobject = $GLOBALS['firstobject'];
}
static function messwithotherthings ()
{
$this->firstobject->propertycontainingobject->methodinsidethatobject();
}
}
--
Peter Ford phone: 01580 893333
Developer fax: 01580 893399
Justcroft International Ltd., Staplehurst, Kent