--TEST--
Closure 043: Scope/bounding combination invariants; static closures
--FILE--
<?php
/* Whether it's scoped or not, a static closure cannot have
 * a bound instance. It should also not be automatically converted
 * to a non-static instance when attempting to bind one */

$staticUnscoped = static function () { var_dump(isset(A::$priv)); var_dump(isset($this)); };

class 
{
    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(nullnull); $d(); echo "\n";
$d $staticScoped->bindTo(nullnull); $d(); echo "\n";

echo 
"After binding, null scope, with instance""\n";
$d $staticUnscoped->bindTo(new Anull); $d(); echo "\n";
$d $staticScoped->bindTo(new Anull); $d(); echo "\n";

echo 
"After binding, with scope, no instance""\n";
$d $staticUnscoped->bindTo(null'A'); $d(); echo "\n";
$d $staticScoped->bindTo(null'A'); $d(); echo "\n";

echo 
"After binding, with scope, with instance""\n";
$d $staticUnscoped->bindTo(new A'A'); $d(); echo "\n";
$d $staticScoped->bindTo(new A'A'); $d(); echo "\n";

echo 
"Done.\n";

--
EXPECTF--
Before binding
bool
(false)
bool(false)

bool(true)
bool(false)

After bindingnull scopeno instance
bool
(false)
bool(false)

bool(false)
bool(false)

After bindingnull scopewith instance

Warning
Cannot bind an instance to a static closure in %s on line %d
bool
(false)
bool(false)


WarningCannot bind an instance to a static closure in %s on line %d
bool
(false)
bool(false)

After bindingwith scopeno instance
bool
(true)
bool(false)

bool(true)
bool(false)

After bindingwith scopewith instance

Warning
Cannot bind an instance to a static closure in %s on line %d
bool
(true)
bool(false)


WarningCannot bind an instance to a static closure in %s on line %d
bool
(true)
bool(false)

Done.