Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
PHP OOP, yani Nesne Yönelimli Programlama, kodu sınıflar ve bu sınıflardan üretilen nesneler etrafında düzenleme yaklaşımıdır. Bir sınıf; verileri özelliklerde, bu verilerle çalışan davranışları ise metotlarda toplar. Böylece aynı sorumluluğa ait kodlar bir arada tutulur, erişim sınırları belirlenir ve büyüyen uygulamalarda bakım kolaylaşır.

Örneğin bir kullanıcıyı yalnızca dizi olarak tutmak yerine, kullanıcı adını doğrulayan ve ekrana uygun biçimde gösteren bir sınıf oluşturabilirsiniz. Sınıf kalıp, nesne ise bu kalıptan üretilmiş çalışan örnektir.

OOP'nin temel parçaları​


Sınıf ve nesne​


Sınıf, özellikleri ve metotları tanımlar. Nesne, new anahtar sözcüğüyle sınıftan oluşturulur. Aynı sınıftan farklı değerlere sahip birçok nesne üretilebilir.

Özellik ve metot​


Özellik nesnenin verisini, metot ise nesnenin yapabildiği işi temsil eder. private, protected ve public erişim belirleyicileri bu üyelerin nereden kullanılabileceğini sınırlar. Genellikle dışarıdan doğrudan değiştirilmemesi gereken veriler private tutulur ve kontrollü metotlarla yönetilir.

Kapsülleme, kalıtım ve arayüz​


Kapsülleme, nesnenin iç durumunu koruyup dışarıya yalnızca gerekli işlemleri açmaktır. Kalıtım, ortak davranışların başka bir sınıftan alınmasını sağlar; ancak yalnızca sınıflar arasında gerçek bir “bir türdür” ilişkisi varsa kullanılmalıdır. Arayüz ise bir sınıfın hangi metotları sunacağını belirleyen sözleşmedir. Farklı sınıflar aynı arayüzü uygulayarak farklı çalışma biçimlerini ortak bir kullanım noktasında birleştirebilir.

YaklaşımVeri ve davranışUygun ihtiyaç
ProsedürelDeğişkenler ve fonksiyonlarla akışKüçük ve doğrusal işlemler
OOPVeri ve kurallı işlemler nesnedeDurumu ve yaşam döngüsü olan varlıklar
Arayüz tabanlı tasarımOrtak sözleşme, farklı uygulamalarDeğiştirilebilir servisler

Tablodaki ayrım kesin bir zorunluluk değildir. Küçük bir betiği yalnızca OOP kullanacak şekilde karmaşıklaştırmak yerine, kodun sorumlulukları arttıkça sınıflara geçmek daha anlaşılır olabilir.

Çalışan en küçük OOP örneği​


Aşağıdaki örnek PHP dosyası olarak doğrudan çalıştırılabilir. private kullanıcı adının sınıf dışından rastgele değiştirilmesini engeller; getDisplayName() ise kontrollü bir çıktı sağlar.

  1. Aşağıdaki kodu user.php adıyla kaydedin.
  2. Komut satırında dosyanın bulunduğu klasöre geçip php user.php komutunu çalıştırın.
  3. Başarılı sonuç olarak Kullanıcı: Ada çıktısını kontrol edin.

Kod:
<?php

class User
{
    private string $name;

    public function __construct(string $name)
    {
        $name = trim($name);

        if ($name === '') {
            throw new InvalidArgumentException('Kullanıcı adı boş olamaz.');
        }

        $this->name = $name;
    }

    public function getDisplayName(): string
    {
        return 'Kullanıcı: ' . $this->name;
    }
}

$user = new User('Ada');
echo $user->getDisplayName() . PHP_EOL;

Bu örnekte __construct() nesne oluşturulurken otomatik çalışır ve geçersiz boş değeri reddeder. $this, o anda kullanılan nesneyi ifade eder. new User('Ada') bir User nesnesi üretir; ardından metot çağrılır.

Komut bulunamadı veya dosya çalıştırılamadı hatası alırsanız PHP'nin komut satırı çalıştırıcısının kurulu ve PATH üzerinden erişilebilir olduğunu kontrol edin. Geçersiz bir ad verirseniz InvalidArgumentException oluşması beklenen davranıştır; çağıran kodun bu istisnayı try/catch ile ele alması gerekir. Gerçek bir uygulamada kullanıcı verisini doğrulamak, görüntülemekten ayrı bir sorumluluk olabilir; örnek yalnızca OOP'nin temel yapısını göstermek içindir.

PHP'de OOP kullanırken kararlar​


  1. Önce sınıfın tek ve anlaşılır sorumluluğunu belirleyin. Örneğin User kullanıcı durumunu, Mailer ise e-posta gönderimini temsil etsin.
  2. Dışarıdan değiştirilmemesi gereken özellikleri private yapın ve geçerli durumu koruyan metotlar sağlayın.
  3. Aynı işlemi farklı sınıflar yapacaksa önce ortak bir arayüz gerekip gerekmediğini değerlendirin; yalnızca kod tekrarını azaltmak için kalıtım eklemeyin.
  4. Sınıflar başka dosyalara ayrıldığında namespace ve use düzenini kullanın; dosyaları otomatik yüklemek için projenin seçtiği autoload mekanizmasını yapılandırın.
  5. Bir sınıfın çok fazla sorumluluğu oluşuyorsa onu daha küçük sınıflara ayırın ve her sınıfı bağımsız test edilebilir hale getirin.

En sık hata, her şeyi sınıfa taşımayı OOP sanmaktır. Yalnızca getter ve setter eklemek de tek başına iyi tasarım anlamına gelmez. Sınıflar gerçek bir sorumluluğu, geçerli durum kurallarını ve birlikte çalışan davranışları temsil etmelidir. Ayrıca public özellikleri sınırsız kullanmak kapsüllemeyi zayıflatır; nesnenin geçersiz bir duruma sokulmasını önlemek için değişiklikleri kontrollü metotlardan geçirmek daha güvenlidir.

Sık sorulan sorular​


PHP'de her sınıfın bir kurucusu olmak zorunda mı?​

Hayır. Nesne oluşturulurken özel bir başlangıç işlemi gerekmiyorsa kurucu tanımlanmayabilir. Ancak nesnenin geçerli olabilmesi için zorunlu değerler varsa bunları kurucuda almak, eksik nesnelerin oluşmasını önler.

Statik metot ile nesne metodu arasındaki temel fark nedir?​

Statik metot sınıf üzerinden çağrılır; otomatik olarak belirli bir nesneye bağlanmaz ve içinde $this bulunmaz. İsterseniz bir nesneyi açık parametre olarak alabilir; statik olmak bütün durum erişimini sihirli biçimde engellemez. Nesne metodu ise belirli bir nesnenin özellikleriyle çalışır. Durum taşıyan işlerde nesne metodu, bağımsız yardımcı işlemlerde ise statik kullanım daha anlamlı olabilir.

Bir sınıf başka bir sınıftan kaç kez kalıtım alabilir?​

Bir sınıf doğrudan tek bir sınıftan kalıtım alabilir; ancak birden fazla arayüzü uygulayabilir. Ortak davranışların kalıtımla mı, arayüzle mi modellenmesi gerektiği sınıflar arasındaki ilişkinin türüne göre belirlenmelidir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic