Пример #1
0
        };
    }
    function getStaticClosure()
    {
        return static function () {
            echo "scoped to A: ";
            var_dump(isset(A::$priv));
            echo "bound: ", isset($this) ? get_class($this) : "no";
        };
    }
}
class B extends A
{
}
$a = new A();
$staticScoped = $a->getStaticClosure();
$nonstaticScoped = $a->getClosure();
echo "Before binding", "\n";
$staticUnscoped();
echo "\n";
$nonstaticUnscoped();
echo "\n";
$staticScoped();
echo "\n";
$nonstaticScoped();
echo "\n";
echo "After binding, no instance", "\n";
$d = $staticUnscoped->bindTo(null);
$d();
echo "\n";
$d = $nonstaticUnscoped->bindTo(null);
Пример #2
0
$staticUnscoped = static function () {
    var_dump(isset(A::$priv));
    var_dump(isset($this));
};
class A
{
    private static $priv = 7;
    static function getStaticClosure()
    {
        return static function () {
            var_dump(isset(A::$priv));
            var_dump(isset($this));
        };
    }
}
$staticScoped = A::getStaticClosure();
echo "Before binding", "\n";
$staticUnscoped();
echo "\n";
$staticScoped();
echo "\n";
echo "After binding, null scope, no instance", "\n";
$d = $staticUnscoped->bindTo(null, null);
$d();
echo "\n";
$d = $staticScoped->bindTo(null, null);
$d();
echo "\n";
echo "After binding, null scope, with instance", "\n";
$d = $staticUnscoped->bindTo(new A(), null);
$d();