PHP OOP

OOP olarak da bilinen nesne yönelimli programlama, modern PHP geliştirmede kullanılan en önemli programlama stillerinden biridir. Geliştiricilerin kodu yeniden kullanılabilir yapılar halinde düzenlemesine yardımcı olur ve uygulamaların büyüdükçe bakımını kolaylaştırır.

PHP’de OOP, Laravel, Symfony gibi çerçevelerde ve diğer birçok profesyonel arka uç sisteminde yoğun olarak kullanılır. OOP'yu anlamak, modern PHP uygulamalarıyla derinlemesine çalışmadan önce önemli bir adımdır.

Bu makale, öğrenme yolunda gösterilen ana PHP OOP konularını açıklamaktadır: OOP nedir, sınıflar ve nesneler, oluşturucular, yıkıcılar, erişim değiştiriciler, miras, sabitler, soyut sınıflar, arayüzler, özellikler, statik yöntemler, statik özellikler, ad alanları ve yinelenebilirler.

PHP OOP nedir

OOP anlamına gelirObject-Oriented Programming. Kodu yalnızca işlevler ve değişkenler yerine nesneler etrafında düzenleyen bir programlama yaklaşımıdır.

Bir nesne, uygulamadaki kullanıcı, ürün, posta, fatura, sipariş, mesaj veya dosya gibi bir şeyi temsil edebilir. Her nesnenin verileri ve davranışları olabilir.

OOP'da veriler genellikle özelliklerde depolanırken davranış genellikle yöntemler olarak yazılır.

Örneğin bir kullanıcı nesnesi ad, e-posta ve rol gibi özelliklere sahip olabilir. Ayrıca oturum açma, oturum kapatma, updateProfile veya hasPermission gibi yöntemler de olabilir.

OOP faydalıdır çünkü geliştiricilere yardımcı olur:

  • Kodu net yapılar halinde düzenleyin.

  • Mantığı uygulama genelinde yeniden kullanın.

  • Tekrarlanan kodu azaltın.

  • Gerçek uygulama konseptlerini daha net bir şekilde modelleyin.

  • Büyük projelerin bakımını kolaylaştırın.

  • Modern PHP çerçeveleriyle daha iyi çalışın.

PHP Sınıfları/Nesneleri

Sınıf, nesneler oluşturmaya yönelik bir plandır. Bir nesnenin sahip olabileceği özellikleri ve yöntemleri tanımlar.

Bir nesne bir sınıfın örneğidir. Bu, sınıfın yapıyı tanımladığı, nesnenin ise bu yapıdan oluşturulan gerçek kullanılabilir sürüm olduğu anlamına gelir.

<?php
class User {
    public $name;
    public $email;

    public function sayHello() {
        return "Hello, " . $this->name;
    }
}

$user = new User();

$user->name = "Adnan";
$user->email = "adnan@example.com";

echo $user->sayHello();
?>

Bu örnekte,Kullanıcısınıftır ve$kullanıcıo sınıftan oluşturulan bir nesnedir.

$buanahtar kelime geçerli nesneyi ifade eder. Nesnenin özelliklerine ve yöntemlerine erişmek için sınıf içinde kullanılır.

Sınıflar ve nesneler PHP OOP’nin temelini oluşturur. En gelişmiş OOP konseptleri bunların üzerine inşa edilmiştir.

PHP Yapıcı

Yapıcı, yeni bir nesne oluşturulduğunda otomatik olarak çalışan özel bir yöntemdir. PHP’de yapıcı yöntemin adı__inşa().

Yapıcılar genellikle nesne özelliklerinin başlangıç değerlerini ayarlamak için kullanılır.

<?php
class User {
    public $name;
    public $email;

    public function __construct($name, $email) {
        $this->name = $name;
        $this->email = $email;
    }

    public function getInfo() {
        return $this->name . " - " . $this->email;
    }
}

$user = new User("Adnan", "adnan@example.com");

echo $user->getInfo();
?>

Yapıcı, önce nesneyi oluşturmak ve ardından her özelliği manuel olarak ayarlamak yerine, nesne oluşturulduğunda değerlerin doğrudan iletilmesine izin verir.

Yapıcılar bağımlılık enjeksiyonu, ilk konfigürasyon, gerekli değerler ve bir nesneyi kullanılmadan önce hazırlamak için kullanışlıdır.

PHP Yıkıcı

Yıkıcı, bir nesne yok edildiğinde veya komut dosyası tamamlandığında otomatik olarak çalışan özel bir yöntemdir. PHP’de yıkıcı yöntemin adı__yok etme().

Yıkıcılar, kaynakları kapatma, son günlükleri yazma veya geçici verileri serbest bırakma gibi temizleme görevleri için kullanılabilir.

<?php
class Logger {
    public function __construct() {
        echo "Logger started.";
    }

    public function __destruct() {
        echo "Logger finished.";
    }
}

$logger = new Logger();
?>

Birçok modern PHP uygulamasında, yıkıcılar yapıcılar kadar sık kullanılmaz ancak yine de OOP yaşam döngüsünün bir parçasıdırlar.

Geliştiriciler yıkıcıları dikkatli kullanmalı ve kritik iş mantığını bunların içine koymaktan kaçınmalıdır çünkü bunların yürütme zamanlaması betiğin nasıl bittiğine bağlı olabilir.

PHP Erişim Değiştiricileri

Erişim değiştiricileri, özelliklere ve yöntemlere nereden erişilebileceğini kontrol eder. PHP üç ana erişim değiştirici sağlar:kamu,korumalıveözel.

  • halka açık:her yerden ulaşılabilir.

  • korumalı:sınıf ve alt sınıfların içinden erişilebilir.

  • özel:yalnızca aynı sınıf içinden erişilebilir.

<?php
class User {
    public $name;
    protected $role;
    private $password;

    public function setPassword($password) {
        $this->password = $password;
    }

    public function getPassword() {
        return $this->password;
    }
}

$user = new User();

$user->name = "Adnan";
$user->setPassword("secret");
?>

Erişim değiştiriciler önemlidir çünkü dahili verileri korurlar ve uygulamanın diğer bölümlerinin bir nesneyle nasıl etkileşimde bulunduğunu kontrol ederler.

Profesyonel PHP geliştirmede, mülkler genellikle özel tutulur veya korunur; bunlara erişimi kontrol etmek için genel yöntemler kullanılır. Buna kapsülleme denir.

PHP Kalıtım

Kalıtım, bir sınıfın başka bir sınıfın özelliklerini ve yöntemlerini yeniden kullanmasına olanak tanır. Ana sınıf paylaşılan mantığı içerirken, alt sınıf bu mantığı genişletebilir veya özelleştirebilir.

PHP’de miras, aşağıdakiler kullanılarak oluşturulur:uzanıranahtar kelime.

<?php
class Person {
    public $name;

    public function sayHello() {
        return "Hello, " . $this->name;
    }
}

class Student extends Person {
    public $grade;

    public function study() {
        return $this->name . " is studying.";
    }
}

$student = new Student();
$student->name = "Adnan";

echo $student->sayHello();
echo $student->study();
?>

Bu örnekte,Öğrencisınıf miras alırKişisınıf. Bu, Öğrencinin Person'da tanımlanan özellikleri ve yöntemleri kullanabileceği anlamına gelir.

Kalıtım, birden fazla sınıfın ortak davranışı paylaştığı durumlarda faydalıdır. Bununla birlikte, geliştiricilerin kalıtımı aşırı kullanmaktan kaçınmaları gerekir çünkü bu, sınıf hiyerarşisi çok karmaşık hale gelirse kodun korunmasını zorlaştırabilir.

PHP Sabitleri

Sınıf sabitleri bir sınıfa ait olan sabit değerlerdir. Roller, durumlar, türler, sınırlar ve konfigürasyon benzeri değerler gibi değişmemesi gereken değerler için kullanışlıdırlar.

Sınıf sabitleri kullanılarak tanımlanır.yapıanahtar kelime.

<?php
class UserRole {
    const ADMIN = "admin";
    const EDITOR = "editor";
    const USER = "user";
}

echo UserRole::ADMIN;
?>

Sınıf sabitlerine kapsam çözümleme operatörü kullanılarak erişilir::.

Aynı sınıf içinde sabitlere aşağıdakiler kullanılarak erişilebilir:kendi::.

<?php
class Status {
    const ACTIVE = "active";

    public function getActiveStatus() {
        return self::ACTIVE;
    }
}
?>

Sabitler, tekrarlanan sabit kodlu dizelerden kaçınmaya yardımcı olur ve kodu daha temiz ve daha güvenli hale getirir.

PHP Soyut Sınıflar

Soyut sınıf, doğrudan nesne olarak oluşturulamayan bir sınıftır. Diğer sınıflar tarafından genişletilmek üzere tasarlanmıştır.

Soyut sınıflar normal yöntemleri ve soyut yöntemleri içerebilir. Soyut bir yöntemin soyut sınıfta gövdesi yoktur ve alt sınıf tarafından uygulanması gerekir.

<?php
abstract class PaymentGateway {
    abstract public function pay($amount);

    public function currency() {
        return "USD";
    }
}

class StripePayment extends PaymentGateway {
    public function pay($amount) {
        return "Paid " . $amount . " using Stripe.";
    }
}

$payment = new StripePayment();

echo $payment->pay(100);
echo $payment->currency();
?>

Soyut sınıflar, alt sınıfları belirli davranışları uygulamaya zorlarken paylaşılan bir yapı tanımlamak istediğinizde kullanışlıdır.

Örneğin, farklı ödeme ağ geçitleri bazı ortak yöntemleri paylaşabilir, ancak her ağ geçidinin ödeme işleme için kendi uygulamasına ihtiyacı olabilir.

PHP Arayüzleri

Bir arayüz, sınıfların uyması gereken bir sözleşmeyi tanımlar. Yöntem gövdeleri olmayan yöntem bildirimlerini içerir.

Bir sınıf bir arayüzü uyguladığında, o arayüz tarafından tanımlanan gerekli yöntemleri sağlamalıdır.

<?php
interface Notifier {
    public function send($message);
}

class EmailNotifier implements Notifier {
    public function send($message) {
        return "Sending email: " . $message;
    }
}

class SmsNotifier implements Notifier {
    public function send($message) {
        return "Sending SMS: " . $message;
    }
}
?>

Arayüzler, farklı sınıfların aynı yapıyı izlemesi ancak mantığı farklı şekilde uygulaması gerektiğinde kullanışlıdır.

Örneğin, e-posta bildirimleri, SMS bildirimleri ve anlık bildirimlerin tümü, mesajları farklı yollarla gönderirken aynı Notifier arayüzünü uygulayabilir.

Modern PHP geliştirmede arayüzler çok önemlidir çünkü esnek, test edilebilir ve gevşek bağlı kodu desteklerler.

PHP Özellikleri

Özellikler, geliştiricilerin kalıtım kullanmadan birden çok sınıftaki yöntemleri yeniden kullanmasına olanak tanır. Bir özellik, bir sınıfa eklenebilen, yeniden kullanılabilir bir yöntem grubu gibidir.

Özellikler kullanılarak tanımlanır.özellikanahtar kelimeyle bir sınıf içinde kullanılır vekullanmakanahtar kelime.

<?php
trait HasSlug {
    public function generateSlug($title) {
        return strtolower(str_replace(" ", "-", $title));
    }
}

class Post {
    use HasSlug;
}

$post = new Post();

echo $post->generateSlug("Learning PHP OOP");
?>

Özellikler, farklı sınıfların aynı yardımcı davranışa ihtiyaç duyduğu ancak doğal olarak aynı kalıtım hiyerarşisine ait olmadığı durumlarda faydalıdır.

Örneğin, birden fazla model, bilgi oluşturma, günlüğe kaydetme, biçimlendirme veya paylaşılan yardımcı program yöntemlerine ihtiyaç duyabilir.

Özellikler dikkatli kullanılmalıdır. Bir özellik çok büyürse veya çok fazla ilgisiz mantık içerirse, kodun anlaşılmasını zorlaştırabilir.

PHP Statik Yöntemler

Statik bir yöntem belirli bir nesneye değil, sınıfın kendisine aittir. Bu, sınıftan bir nesne oluşturmadan statik bir yöntemi çağırabileceğiniz anlamına gelir.

Statik yöntemler kullanılarak tanımlanır.statikanahtar kelime.

<?php
class MathHelper {
    public static function add($a, $b) {
        return $a + $b;
    }
}

echo MathHelper::add(5, 10);
?>

Statik yöntemlere kapsam çözümleme operatörü kullanılarak erişilir::.

Genellikle yardımcı yöntemler, yardımcı sınıflar, basit biçimlendiriciler ve nesne durumuna ihtiyaç duymayan işlemler için kullanılırlar.

Statik bir yöntemin içinde kullanamazsınız$buçünkü nesne örneği yok. Bunun yerine, statik yöntemler, statik özelliklere veya diğer statik yöntemlere aşağıdakileri kullanarak erişebilir:kendi::.

PHP Statik Özellikler

Statik bir özellik, belirli bir nesne yerine sınıfın kendisine aittir. Bu, değerin her nesne örneğinde ayrı olarak saklanmak yerine sınıf genelinde paylaşıldığı anlamına gelir.

<?php
class Counter {
    public static $count = 0;

    public function __construct() {
        self::$count++;
    }
}

new Counter();
new Counter();
new Counter();

echo Counter::$count;
?>

Bu örnekte, her yeni nesne oluşturulduğunda static özelliği$sayımıartar. Değer sınıf düzeyinde paylaşılır.

Statik özellikler; sayaçlar, paylaşılan yapılandırma, önbelleğe alınmış değerler veya sınıf düzeyindeki durum için yararlı olabilir.

Ancak büyük uygulamalarda statik durum dikkatli kullanılmalıdır çünkü durum beklenmedik bir şekilde değişirse test etme ve hata ayıklamayı daha zor hale getirebilir.

PHP Ad Alanları

Ad alanları sınıfları, arayüzleri, özellikleri ve işlevleri mantıksal gruplar halinde düzenlemeye yardımcı olur. Aynı ada sahip olabilecek sınıflar arasındaki isim çakışmalarını da önlerler.

Büyük bir uygulamada birçok sınıfın Kullanıcı, Denetleyici, Hizmet, İstek veya Yanıt gibi ortak adları olabilir. Ad alanları, bu adların uygulamanın farklı bölümlerinde çakışma olmadan var olmasına olanak tanır.

<?php
namespace App\Models;

class User {
    public function getName() {
        return "Adnan";
    }
}
?>

Bir ad alanından bir sınıf aşağıdakiler kullanılarak içe aktarılabilir:kullanmakanahtar kelime.

<?php
use App\Models\User;

$user = new User();

echo $user->getName();
?>

Ad alanları modern PHP projelerinde çok önemlidir. Laravel ve Symfony gibi çerçeveler, denetleyicileri, modelleri, hizmetleri, ara yazılımları, istekleri, işleri ve diğer birçok sınıfı düzenlemek için ad alanlarını kullanır.

PHP Yinelenebilirler

Yinelenebilir bir değer, kullanılarak döngülenebilen bir değerdir.her biri. PHP’de diziler yinelenebilir ve doğru arayüzleri uygularlarsa nesneler de yinelenebilir.

yinelenebilirtype, içinden döngü yapılabilecek dizileri veya nesneleri kabul etmek için bir işlev parametre türü olarak kullanılabilir.

<?php
function printItems(iterable $items) {
    foreach ($items as $item) {
        echo $item;
    }
}

printItems(["PHP", "Laravel", "Symfony"]);
?>

Yinelenebilirler, bir fonksiyonun yalnızca normal dizilerle değil, herhangi bir liste benzeri veri yapısıyla çalışması gerektiğinde kullanışlıdır.

PHP ayrıca, aşağıdakileri kullanarak yinelenebilir değerler döndürebilen oluşturucuları da destekler:verimanahtar kelime.

<?php
function numbers() {
    yield 1;
    yield 2;
    yield 3;
}

foreach (numbers() as $number) {
    echo $number;
}
?>

Jeneratörler büyük verilerle çalışırken kullanışlıdır çünkü her şeyi aynı anda belleğe yüklemeden değerleri tek tek üretebilirler.

PHP OOP Konseptleri Birlikte Nasıl Çalışır?

Gerçek PHP uygulamalarında bu OOP kavramları sıklıkla birlikte kullanılır. Bir sınıfın özel özellikleri, bir yapıcısı, sabitleri, yöntemleri ve bir ad alanı olabilir. Bir arayüz uygulayabilir, bir özellik kullanabilir, soyut bir sınıfı genişletebilir ve yinelenebilir veriler döndürebilir.

Aşağıdaki örnek, çeşitli OOP kavramlarını basit bir yapıda birleştirir.

<?php
namespace App\Services;

interface ReportGenerator {
    public function generate(): iterable;
}

trait HasTimestamp {
    public function currentTime() {
        return date("Y-m-d H:i:s");
    }
}

abstract class BaseReport {
    const FORMAT = "text";

    protected $title;

    public function __construct($title) {
        $this->title = $title;
    }

    abstract public function generate(): iterable;
}

class SalesReport extends BaseReport implements ReportGenerator {
    use HasTimestamp;

    public static $count = 0;

    public function __construct($title) {
        parent::__construct($title);
        self::$count++;
    }

    public function generate(): iterable {
        yield $this->title;
        yield "Generated at: " . $this->currentTime();
        yield "Format: " . self::FORMAT;
    }
}

$report = new SalesReport("Monthly Sales Report");

foreach ($report->generate() as $line) {
    echo $line;
}
?>

Bu örnekte ad alanı, arayüz, özellik, soyut sınıf, sınıf sabiti, kurucu, statik özellik, miras ve yinelenebilir çıktı kullanılmaktadır. OOP kavramlarının düzenli kod oluşturmak için birlikte nasıl çalışabileceğini gösterir.

OOP Modern PHP’de Neden Önemli?

Modern PHP geliştirmesi büyük ölçüde OOP'ya bağlıdır. Çerçeveler, paketler, kitaplıklar ve profesyonel uygulamalar genellikle sınıflar, arayüzler, hizmetler, denetleyiciler, modeller ve yeniden kullanılabilir nesneler etrafında düzenlenir.

Örneğin Laravel'da denetleyiciler sınıflardır, modeller sınıflardır, istekler sınıflardır, işler sınıflardır, ara yazılımlar sınıflardır ve hizmetler genellikle sınıflar olarak yazılır. OOP'yu anlamak, çerçevenin nasıl çalıştığını anlamayı çok daha kolaylaştırır.

OOP ayrıca daha iyi testleri ve daha temiz mimariyi destekler. Kod net nesneler ve sözleşmeler halinde düzenlendiğinde uygulamanın parçalarını değiştirmek, birim testleri yazmak ve projeyi zaman içinde sürdürmek daha kolay hale gelir.

Sonuç

PHP nesne yönelimli programlama, modern ve profesyonel PHP uygulamaları oluşturmaya yönelik temel bir beceridir. Sınıflar, nesneler, yapıcılar, yıkıcılar, erişim değiştiriciler, kalıtım, sabitler, soyut sınıflar, arayüzler, özellikler, statik yöntemler, statik özellikler, ad alanları ve yinelenebilirler gibi kavramlar, geliştiricilerin daha temiz ve daha yeniden kullanılabilir kod yazmasına yardımcı olur.

OOP ilk başta karmaşık gelebilir ancak her kavram basit örneklerle uygulandığında daha kolay hale gelir. Sınıflar ve nesnelerle başlayın, ardından yavaş yavaş yapıcılara, erişim değiştiricilere, kalıtıma, arayüzlere, özelliklere ve ad alanlarına geçin.

PHP OOP'yu anladıktan sonraki adım, bu kavramları OOP’nin uygulamanın neredeyse her bölümünde kullanıldığı Laravel gibi gerçek projelerde ve çerçevelerde uygulamaktır.