| <?php |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| const CONSTANT_INT = 1000; |
| $y = 5; |
| |
| $fn0 = fn() => 100; |
| |
| $fn1a = fn(int $x) => $x + $y; |
| |
| $fn1b = function ($x) use ($y) { |
| return $x + $y; |
| }; |
| |
| $fn2 = fn(int $a, ArrowFunctions $b) => $a + $b->getNumber() * $y; |
| |
| fn (array $x) => $x; // parameter type |
| |
| fn(int $x): int => $x; // return type |
| |
| fn(?array $z, int $x): ?int => $x + count($z); // parameter and return type |
| |
| fn($x = 100) => $x; // default value |
| |
| fn(&$x) => $x; // reference |
| |
| fn&($x) => $x; // reference |
| |
| fn&(&$x) => $x; // reference |
| |
| fn($x, ...$reset) => $reset; // variadics |
| |
| fn($x, &...$reset) => $reset; // reference variadics |
| |
| fn(): int => CONSTANT_INT; |
| |
| fn(): ArrowFunctions => ArrowFunctions::new(); |
| |
| function (): ArrowFunctions { |
| return ArrowFunctions::new(); |
| }; |
| |
| // nest |
| $af = fn() => fn() => $y; |
| (fn() => fn() => $y)()(); |
| (fn() => function() use ($y) {return $y;})()(); |
| |
| $af = fn(int $x): callable => fn(int $z): int => $x + $y * $z; |
| $af = fn(ArrowFunctions $x): callable => fn(?ArrowFunctions $z): ?ArrowFunctions => new ArrowFunctions(); |
| |
| $fn3 = function ($x) use ($y) { |
| return fn() => $x + $y; |
| }; |
| $fn4 = function ($x) use ($y) { |
| return fn($x) => $x + $y; |
| }; |
| |
| function test(callable $f) { |
| return fn(...$args) => !$f(...$args); |
| } |
| |
| class ArrowFunctions |
| { |
| |
| public function test() { |
| $y = 100; |
| $af = fn(): ?ArrowFunctions => $this; |
| $af = fn() => $$variable; |
| $af = fn() => self::class; |
| $af = fn($x): ?int => $x + $y; |
| $af = static fn() => isset($this); // static |
| } |
| |
| public function getNumber(): int { |
| return 100; |
| } |
| |
| public static function new() { |
| return new ArrowFunctions(); |
| } |
| } |