function cf() { A1::f(); A2::f(); \A1::f(); \A2::f(); B::f(); C::f(); }
[EXPECT php] [FILE] <?php class A { function f() { echo "f"; } } class B extends A { function f() { parent::f(); } } $b = new B(); $b->f();
[expect] ahoj [file] <?php eval('class A { function f() { echo "ahoj"; } }'); class B extends A { } B::f();
[expect php] [file] <?php $a = array(""); $a[0][0] = "f"; var_dump($a); $a = array("bubu"); @($a[0][0] = "xyz"); var_dump($a); class C { public $f; } $c = new C(); $c->f = "kuku"; $c->f[2] = "x"; var_dump($c); class B { static $f; } B::$f = "hello"; B::$f[3] = "x"; var_dump(B::$f); eval('class A { static $f; }'); A::$f = "hello"; A::$f[3] = "x"; var_dump(A::$f);
<?php class A { function f() : int { return 42; } } class B { function g() : string { return 'string'; } } $a = new A(); print $a->g(); print $a->f(); $a = new B(); print $a->g(); print $a->f();
$x = $c[2]; print "$x\n"; */ class B { function f(int $a) : int { return $a; } // @return int[] function g() { return [1, 2, 3]; } /** * @return string[] */ function h() { return ['a', 'b', 'c']; } } $e = new B(); /* $x = $e->f($e->g()[1]); print "$x\n"; */ // Should be of type string $f = $e->h()[2]; $x = $e->f($f); print "{$x}\n";
<?php class A { public static function f() { return function () { var_dump(self::class); var_dump(static::class); }; } } class B extends A { } $f = B::f(); $f(); $g = $f->bindTo(null, A::class); $g(); $foo = function () { var_dump(self::class); var_dump(static::class); }; $bar = $foo->bindTo(null, A::class); $bar();
<?php class A { static function f() { return new static(); } static function g($o) { return $o instanceof static; } } class B extends A { } var_dump(A::g(A::f())); var_dump(A::g(B::f())); var_dump(B::g(A::f())); var_dump(B::g(B::f()));
<?php class A { function f() { } } class B { function g() { } } $v = new A(); if (rand(0, 1) > 0) { $v = new B(); $v->g(); } else { $v->f(); } if (rand(0, 1) > 0) { $v = new A(); $v->g(); } else { $v = new B(); $v->f(); }
function g() { echo "Z::g -- this: |" . get_class($this) . "|\n"; B::f(); }