function testBefore(<Test> a, var b = 5, int c = 10)
{
    a->method1();

    return b + c;
}

namespace Test;

use RuntimeException as RE;

/**
 * Example comment
 */
class Test extends CustomClass implements TestInterface
{
    const C1 = null;

    // Magic constant: http://php.net/manual/ru/language.constants.predefined.php
    const className = __CLASS__;

    public function method1()
    {
        int a = 1, b = 2;
        return a + b;
    }

    // See fn is allowed like shortcut
    public fn method2() -> <Test>
    {
        call_user_func(function() { echo "hello"; });


        [1, 2, 3, 4, 5]->walk(
            function(int! x) {
                return x * x;
            }
        );

        [1, 2, 3, 4, 5]->walk(
            function(_, int key) { echo key; }
        );

        array input = [1, 2, 3, 4, 5];

        input->walk(
            function(_, int key) { echo key; }
        );


        input->map(x => x * x);

        return this;
    }
}