Ok İşlevleri

Ok işlevleri PHP 7.4'te anonim işlevler için daha kısa bir sözdizimi olarak tanıtılmıştır.

Anonim işlevler ve ok işlevlerinin ikisi de Closure sınıfı kullanılarak gerçeklenmiştir.

Ok işlevlerinin temel biçimi: fn (bağımsız değişkenler) => ifade

Ok işlevleri, üst etki alanındaki değişkenleri daima otomatik kullanması dışında anonim işlevlerin desteklediği özelliklerin tümünü destekler.

İfadede kullanılan bir değişken üst etki alanında tanımlandığında, örtük olarak değeriyle aktarılır. Aşağıdaki örnekte $fn1 ve $fn2 işlevleri aynı şekilde davranır.

Örnek 1 - Ok işlevleri otomatik olarak değişkenleri üst etki alanından daima değerleriyle alır

<?php

$y
= 1;

$fn1 = fn($x) => $x + $y;
// $y bağımsız değişkenini değeriyle kullanmaya eşdeğerdir:
$fn2 = function ($x) use ($y) {
return
$x + $y;
};

var_export($fn1(3));
?>

Yukarıdaki örneğin çıktısı:

 4 

Aşağıdaki örnek, ok işlevleri iç içe kullanılsa da çalışır:

Örnek 2 - Ok işlevleri otomatik olarak değişkenleri iç içe olsalar bile üst etki alanından daima değerleriyle alır

<?php

$z
= 1;
$fn = fn($x) => fn($y) => $x * $y + $z;
// 51 çıktılanır
var_export($fn(5)(10));
?>

Anonim işlevlere benzer olarak, ok işlevleri sözdizimi de, bağımsız değişken ve dönüş türleri dahil, öntanımlı değerler, değişken sayıda bağımsız değişkenler, gönderimli aktarım ve dönüşler gibi rasgele işlev imzalarına da izin verir. Aşağıdaki ok işlevlerinin tamamı geçerli örneklerdir:

Örnek 3 - Ok işlevi örnekleri

<?php

fn(array $x) => $x;
static fn():
int => $x;
fn(
$x = 42) => $x;
fn(&
$x) => $x;
fn&(
$x) => $x;
fn(
$x, ...$rest) => $rest;

?>

Ok işlevleri değişken bağlamını değeriyle kullanır. Bu kabaca, ok işlevi içinde kullanılan her $x değişkeni için bir use($x) çalıştırmaya eşdeğerdir. Değişken bağlamını değeriyle kullanmaktan kasıt, dış etki alanındaki herhangi bir değerin değiştirilmesinin mümkün olmayacağıdır. Değişken bağlamını gönderimiyle kullanmak için anonim işlevler kullanılabilir.

Örnek 4 - Dış etki alanındaki değerler ok işlevleri kullanılarak değiştirilemez

<?php

$x
= 1;
$fn = fn() => $x++; // Etkisiz
$fn();
var_export($x); // 1 çıktılanır

?>

Sürüm Bilgisi

Sürüm: Açıklama
7.4.0 Ok işlevleri kullanılabilir oldu.

Notlar

Bilginize: Bir ok işlevi içinden func_num_args(), func_get_arg() ve func_get_args() kullanmak mümkündür.

To Top