function f() { $a = new A(); for ($i = 0; $i < 1000000; $i++) { $a->g(); } }
<?php class A { function g() { echo "function g - begin\n"; function f() { echo "function f\n"; } echo "function g - end\n"; } } $a = new A(); $a->g(); f();
$x =& $z; return $x; } public function g() { global $z; $x =& $z; return $x; } } function f() { global $z; $x =& $z; return $x; } function g(&$x) { $x[] = 1; } $z = array(1); $a = new A(); g(f()); __var_dump($z); g(A::f()); __var_dump($z); $g = "g"; $g(A::f()); __var_dump($z); g($a->g()); __var_dump($z);
static function f() { $x = A::g(1, 2); $y =& A::g(1, 2); }
<?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();
<?php function f($arg0, $arg1) { var_dump($arg0, $arg1); } function g(&$arg0, $arg1) { var_dump($arg0, $arg1); } class A { function f($f, $var) { $f($this, ${$var} = 5); } function g($f, $var) { $f($this, $var++); } } $a = new A(); $a->f('f', 'this'); $a->f('g', 'this'); $a->g('f', 30); $a->g('g', 30);
<?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 interface I { public function f() : I; } class C { public function g() { $v = new self(); if ($this instanceof I) { $v = $this->f(); } return $v; } } class A extends C implements I { public function f() : I { return $this; } } $ancestor = new A(); $ancestor->g();
<?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(); }
<?php trait B { public function g() : self { return $this; } } class A { use B; public function f() { } public function h() : self { return $this; } } $a = new A(); $a->g()->f(); $a->h()->f(); $a->g()->z(); $a->h()->z();