Hi,

yes, afaik it's intentional. This was made for making parent::foo() work.
Here's a shorter (at least a bit shorter *g*) example of this behavior:

<?php
class foo {
  function a() {
    bar::b();
  }
}
class bar {
  function b() {
    var_dump($this);
  }
}
$foo = new foo();
$foo->a(); // Calls bar::b()
?>

Prints:

object(foo)#1 (0) {
}

So in a static call $this holds the instance of the calling object.

johannes

Ard Biesheuvel wrote:

> 
> Is the fact that the following code works intentional ?
> 
> class S {
>          function func() {
>                  A::meth();
>          }
> }
> 
> class A {
>          private $bar;
> 
>          function meth() {
>                  $this->bar="bar";
>          }
> 
>          function func() {
>                  S::func();
>                  echo "$this->bar\n";
> 
>          }
> }
> 
> 
> $a = new A;
> $a->func();
> 
> ... so A::$this is accessed through two static calls to different classes.
> 

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to