PHP Fonksiyonel Programlama

PHP’nin işlevsel programlaması fonksiyonlara dayanır.

PHP’nin işlevsel programlaması fonksiyonlara dayanır. PHP’deki fonksiyonlar, bir dizi eylemi gerçekleştirmek için düzenli, yeniden kullanılabilir kod sağlar. Fonksiyonlar kodlama sürecini basitleştirir, gereksiz mantığı önler ve kodun takip edilmesini kolaylaştırır. Bu konuda PHP’de fonksiyonları, argümanları, parametreleri, dönüş deyimlerini ve kapsamın bildirimini ve kullanımını inceleyeceğiz.

Closure

Bir closure, kapsam dışına erişemeyen anonim bir işlevdir.

Anonim bir fonksiyonu bu şekilde tanımladığınızda, o fonksiyon için bir “isim alanı” oluşturmuş olursunuz. Şu anda yalnızca bu isim alanına erişimi vardır.

$externalVariable = "Hello";
$secondExternalVariable = "Foo"; 
$myFunction = function() { 
  
  var_dump($externalVariable, $secondExternalVariable); // değişkenler tanımlanmadığı için iki hata bildirimi döndürür 

}

Herhangi bir harici değişkene erişimi yoktur. Bu isim alanının harici değişkenlere erişmesine izin vermek için, bunu closure’lar (use()) aracılığıyla tanıtmanız gerekir.

$myFunction = function() use($externalVariable, $secondExternalVariable) {
   var_dump($externalVariable, $secondExternalVariable); // Hello Foo
}

Bu durum büyük ölçüde PHP’nin sıkı değişken kapsamından kaynaklanmaktadır – Bir değişken kapsam içinde tanımlanmamışsa veya global ile getirilmemişse, o zaman mevcut değildir.

Ayrıca:

Değişkenleri üst kapsamdan devralmak, global değişkenleri kullanmakla aynı şey değildir. Global değişkenler, hangi fonksiyon çalıştırılırsa çalıştırılsın aynı olan global kapsamda bulunur.

Bir closure’ın ana kapsamı, closure’ın bildirildiği işlevdir (çağrıldığı işlev olması gerekmez).

PHP belgelerinden.


PHP’de closure’lar erken bağlama yaklaşımını kullanır. Bu, use anahtar sözcüğü kullanılarak closure’un isim alanına aktarılan değişkenlerin, closure tanımlandığında aynı değerlere sahip olacağı anlamına gelir.

Bu davranışı değiştirmek için değişkeni by-reference olarak geçirmelisiniz.

$rate = .05;

// Değişkeni closure'ın kapsamına aktarır
$calculateTax = function ($value) use ($rate) {
    return $value * $rate;
};

$rate = .1; 

print $calculateTax(100); // 5
$rate = .05;

// Değişkeni closure'ın kapsamına aktarır
$calculateTax = function ($value) use (&$rate) { // rate'den önceki & işaretine dikkat edin
    return $value * $rate;
};

$rate = .1;

print $calculateTax(100); // 10

Closure içeren/içermeyen anonim fonksiyonlar tanımlanırken varsayılan argümanlar dolaylı olarak gerekli değildir.

$message = 'Im yelling at you';

$yell = function() use($message) {
    echo strtoupper($message);
};

$yell(); // çıktı: IM YELLING AT YOU

Değişkenlere atama

Anonim işlevler, callback beklenen yerlerde parametre olarak kullanılmak üzere değişkenlere atanabilir:

$uppercase = function($data) {
    return strtoupper($data);
};

$mixedCase = ["Hello", "World"];
$uppercased = array_map($uppercase, $mixedCase);
print_r($uppercased);

Bu değişkenler bağımsız fonksiyon çağrıları olarak da kullanılabilir:

echo $uppercase("Hello world!"); // HELLO WORLD!

Fonksiyon olarak nesneler

class SomeClass {
    public function __invoke($param1, $param2) {
        // kod buraya
    }
}

$instance = new SomeClass();
$instance('First', 'Second'); // __invoke() metodunu çağır

Bir __invoke yöntemine sahip bir nesne aynen diğer işlevler gibi kullanılabilir.

__invoke yöntemi nesnenin tüm özelliklerine erişebilecek ve herhangi bir yöntemi çağırabilecektir.

Dış değişkenlerin kullanımı

use yapısı, değişkenleri anonim fonksiyonun kapsamına almak için kullanılır:

$divisor = 2332;
$myfunction = function($number) use ($divisor) {
    return $number / $divisor;
};

echo $myfunction(81620); //Çıktı 35

Değişkenler referans olarak da içe aktarılabilir:

$collection = [];

$additem = function($item) use (&$collection) {
    $collection[] = $item;
};

$additem(1);
$additem(2);

//$collection : [1,2]

Yerleşik işlevleri callback olarak kullanma

Bir argüman olarak callable alan işlevlerde, PHP yerleşik işlevi ile bir string de koyabilirsiniz. Dizideki tüm stringlerin başındaki ve sonundaki boşlukları kaldırmak için array_map parametresi olarak trim kullanmak yaygındır.

$arr = ['   one  ', 'two   ', '   three'];
var_dump(array_map('trim', $arr));

// array(3) {
//   [0] =>
//   string(3) "one"
//   [1] =>
//   string(3) "two"
//   [2] =>
//   string(5) "three"
// }

Anonim fonksiyon

Anonim fonksiyon, sadece adı olmayan bir fonksiyondur.

// Anonim fonksiyon
function() {
    return "Hello World!";
};

PHP’de anonim bir işlev bir ifade gibi ele alınır ve bu nedenle noktalı virgül ; ile sonlandırılmalıdır.

Anonim bir fonksiyon bir değişkene atanmalıdır.

// Bir değişkene atanan anonim işlev
$sayHello = function($name) {
    return "Hello $name!";
};

print $sayHello('John'); // Hello John

Ya da başka bir fonksiyonun parametresi olarak geçirilmelidir.

$users = [
    ['name' => 'Alice', 'age' => 20], 
    ['name' => 'Bobby', 'age' => 22], 
    ['name' => 'Carol', 'age' => 17]
];

// Anonim işlev uygulayan Map işlevi
$userName = array_map(function($user) {
    return $user['name'];
}, $users);

print_r($usersName); // ['Alice', 'Bobby', 'Carol']

Ya da başka bir işlevden döndürülmüş olabilir.

Kendi kendini çalıştıran anonim fonksiyonlar:

// PHP 7.x
(function () {
    echo "Hello world!";
})();

// PHP 5.x
call_user_func(function () {
    echo "Hello world!";
});

Kendi kendini çalıştıran anonim fonksiyonlara argüman geçirme:

// PHP 7.x
(function ($name) {
    echo "Hello $name!";
})('John');

// PHP 5.x
call_user_func(function ($name) {
    echo "Hello $name!";
}, 'John');

Saf fonksiyonlar

Saf fonksiyon, aynı girdi verildiğinde her zaman aynı çıktıyı döndüren ve yan etkisi olmayan bir fonksiyondur.

// Bir saf fonksiyon örneği
function add($a, $b) {
    return $a + $b;
}

Yan etkilerden kasıt; dosya sistemini değiştirmek, veritabanlarıyla etkileşim kurmak, hatta ekrana yazı yazdırmaktır.

// saf olmayan fonksiyon
function add($a, $b) {
    echo "Topluyoruz...";
    return $a + $b;
}

PHP’de sık kullanılan işlevsel yöntemler

Eşleme

Bir dizinin tüm elemanlarına bir fonksiyon uygulama :

array_map('strtoupper', $array);

Bunun, listede callback’in önce geldiği tek yöntem olduğunu unutmayın.

İndirgeme (veya katlama) – reduce

Bir diziyi tek bir değere indirgeme :

$sum = array_reduce($numbers, function ($carry, $number) {
   return $carry + $number;
});

Filtreleme

Geri çağırmanın yalnızca true döndürdüğü dizi öğelerini döndürür:

$onlyEven = array_filter($numbers, function ($number) {
    return ($number % 2) === 0;
});

Kapsam

PHP’deki anonim işlevlerin diğer PHP işlevleri gibi kendi kapsamı vardır.

JavaScript’te anonim bir işlev dış kapsamdaki bir değişkene erişebilir. Ancak PHP’de buna izin verilmez.

$name = 'John';

// Anonim fonksiyon kapsam dışına erişmeye çalışıyor
$sayHello = function() {
    return "Hello $name!";
}

print $sayHello('John'); // Hello !
// Bildirimler etkinken, bir de Tanımlanmamış değişken $name bildirimi vardır

Parametre olarak callback fonksiyonu geçirme

Kullanıcı tanımlı callback işlevlerini parametre olarak kabul eden birkaç PHP işlevi vardır, örneğin: call_user_func(), usort() ve array_map().

Kullanıcı tanımlı callback fonksiyonunun nerede tanımlandığına bağlı olarak, bunları aktarmanın farklı yolları olabilir:

Prosedürel tarz: 

function square($number)
{
    return $number * $number;
}

$initial_array = [1, 2, 3, 4, 5];
$final_array = array_map('square', $initial_array);
var_dump($final_array); // 1, 4, 9, 16, 25 içeren yeni diziyi yazdırır

Object Oriented stil: 

class SquareHolder
{
    function square($number)
    {
        return $number * $number;
    }
}

$squaredHolder = new SquareHolder();
$initial_array = [1, 2, 3, 4, 5];
$final_array = array_map([$squaredHolder, 'square'], $initial_array);

var_dump($final_array); // 1, 4, 9, 16, 25 içeren yeni diziyi yazdırır

Statik bir yöntem kullanarak Nesne Yönelimli stil: 

class StaticSquareHolder
{
    public static function square($number)
    {
        return $number * $number;
    }
}

$initial_array = [1, 2, 3, 4, 5];
$final_array = array_map(['StaticSquareHolder', 'square'], $initial_array);
// veya:
$final_array = array_map('StaticSquareHolder::square', $initial_array); //  PHP >= 5.2.3

var_dump($final_array); // 1, 4, 9, 16, 25 içeren yeni diziyi yazdırır
Bu yazı topluluk tarafından oluşturuldu. Lisans bilgisine bakabilirsiniz. Yanlış veya eksik bilgileri düzenlemek için github üzerinden katkıda bulunabilirsiniz.

Kategoriler: Ders, PHP

Okumaya devam et!
Sonraki Yazı: PHP Veri Türleri

PHP zayıf tiplemeli bir dildir.

PHP ile mail gönderme

Tipik bir e-postanın üç ana bileşeni vardır: Bir alıcı (e-posta adresi olarak gösterilir) Bir konu Bir mesaj gövdesi PHP’de mail göndermek, yerleşik mail() işlevini çağırmak kadar basit olabilir.

PHP Veri Türleri

PHP zayıf tiplemeli bir dildir.

PHP’de Array

Array, keyfi sayıda değeri tek bir değişkende saklayan bir veri yapısıdır.

PHP’de ilk kod – Hello World

PHP (PHP’nin özyinelemeli kısaltması: Hypertext Preprocessor) yaygın olarak kullanılan açık kaynaklı bir programlama dilidir.

Yorum Gönderin

E-posta hesabınız yayımlanmayacak.

koddla
Tema Mundana by WowThemes.net.