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.
--
Ard
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.
Yeah for BC sake, but if you define the function's as static explicitly it
won't work.
At 01:54 PM 6/21/2004 +0200, 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.
--
Ard