Question: I have class with closure in static property.

If i copy property inside variable and call, it will not generate any error.
But if i call static property direct, i have fatal error `Function name must be a string`

```
<?php
class Ctest{
    static $sysClassReturnObj;

    static function test(){
        self::$sysClassReturnObj = function(){};
        self::$sysClassReturnObj();
    }
}

Ctest::test();

```

Why i can't call and where i can read about this behaviours?

Answer: 
It's a PHP-ism. `()` binds tighter than `::`, so your function call is executing as the equivalent of

```
self::($var());

```

That makes `$var` be an undefined local variable, instead of a class attribute.

note the warning at the end of this:

```
marc@panic:~$ cat z.php
<?php

class Ctest {
        static $foo;
        static function test() {
                self::$foo = function() {};
                self::$foo();
        }
}

Ctest::test();

marc@panic:~$ php z.php
PHP Notice:  Undefined variable: foo in /home/marc/z.php on line 7
PHP Fatal error:  Function name must be a string in /home/marc/z.php on line 7

```

So yeah, you'll have to work around it with

```
$temp = self::$sysClassReturnObj;
$temp();

```
I think your problem comes from this : self::$sysClassReturnObj();. You have declared a variable(static $sysClassReturnObj;) and you call it as a funtion.