Re: context when calling non static method of class in a static way
| From: | Mike Mackintosh | Date: | Sun, 22 May 2011 14:47:46 +0000 |
| Subject: | Re: context when calling non static method of class in a static way | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-313075@lists.php.net to get a copy of this message | ||
Simon,
You may want to be careful with the way you declare your class methods.
Example:
public function bar() != static function bar(), even if you use pnysudsfksdljfasdjfsd (::)
See the example below.
class Foo{
static function barStatic()
{
echo get_class($this);
}
public function barPublic()
{
echo get_class($this);
}
}
class Foobar{
public function callBarStatic()
{
Foo::barStatic();
}
public function callBarPublic()
{
Foo::barPublic();
}
}
$oo = new Foobar;
$oo->callBarStatic(); // returns only Foo
$oo->callBarPublic(); // returns Foobar
On May 22, 2011, at 10:17 AM, Simon Hilz wrote:
> hi,
>
> lets assume the following classes:
>
> class Foo{
>
> public function bar()
> {
> echo get_class($this);
> }
>
> }
>
> class Foobar{
>
> public function callBarStatic()
> {
> Foo::bar();
> }
>
> }
>
> the following code results in the output "Foobar":
>
> $obj = new Foobar();
> $obj->callBarStatic();
>
> That means that the static call of bar() is executed in the context of Foobar. Is this behavior
> deliberate? If so, it would open a great way of object composition patterns. But only if it will be
> retained in future versions :) (i've tested with 5.3.5)
>
>
> Simon Hilz
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>