15 Ocak 2025

PHP'de hata yönetimi (error handling)

 PHP'de hata yönetimi (error handling) çok önemlidir çünkü veritabanı bağlantıları ve sorgular sırasında oluşabilecek hatalar uygulamanızın düzgün çalışmasını engelleyebilir. Bu tür hataları yönetmek için PDO kullanıyorsanız, $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) kodu, hata ayıklama ve hata yönetimini daha etkili hale getirir.

1. PDO ve setAttribute Metodu

PDO (PHP Data Objects), PHP'nin veritabanlarına güvenli ve esnek bir şekilde bağlanmasını sağlayan bir sınıftır. PDO, veritabanı bağlantıları, sorgu çalıştırma, hata yönetimi gibi işlemleri daha düzenli bir şekilde yapmanıza yardımcı olur.

setAttribute() metodu, PDO nesnesinin çeşitli ayarlarını yapmanıza olanak tanır. Bu metod, PDO'yu daha özelleştirilebilir hale getirir.

2. Hata Yönetimi ve ATTR_ERRMODE

PDO::ATTR_ERRMODE PDO'nun hata yönetimi ile ilgilidir. Bu, veritabanı bağlantısında ve sorgularda oluşan hataların nasıl yönetileceğini belirler.

Hata yönetimi modları:

  • PDO::ERRMODE_SILENT (Varsayılan): Hatalar gizlenir. PDO hata mesajlarını göstermez.
  • PDO::ERRMODE_WARNING: PDO, hata mesajlarını sadece uyarı olarak gösterir. Uyarılar, PHP'nin normal hata ayıklama sistemine benzer.
  • PDO::ERRMODE_EXCEPTION: PDO, hata meydana geldiğinde bir exception (istisna) fırlatır. Bu, hata ayıklamayı daha kolay hale getirir, çünkü hataları yakalamak için try-catch blokları kullanabilirsiniz.
ÖRNEK:
<?php try { $db = new PDO('mysql:host=localhost;dbname=testdb', 'root', ''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Hata yönetimini ayarlıyoruz // Bir sorgu çalıştırıyoruz $query = $db->query("SELECT * FROM non_existent_table"); } catch (PDOException $e) { // Hata meydana geldiğinde exception yakalanır echo "Hata: " . $e->getMessage(); } ?>

Açıklama:

  • try bloğu: PDO nesnesini oluşturup sorgu çalıştırdığınız kısımdır. Eğer burada bir hata oluşursa, PDO bir exception fırlatacaktır.
  • catch bloğu: Eğer bir exception fırlatılırsa, bu blok devreye girer. PDOException sınıfı, PDO ile ilgili hataları yakalar. Bu hatayı $e->getMessage() ile ekrana yazdırabilirsiniz.

Avantajlar:

  • Hatalar hakkında daha fazla bilgi edinirsiniz.
  • Hata mesajları özelleştirilebilir ve hata ayıklama çok daha kolay olur.
  • Exception kullanarak hatalarla başa çıkmak, programın geri kalanının düzgün çalışmasını sağlar, çünkü hatayı kontrol edebilir ve uygun şekilde yanıt verebilirsiniz.

14 Ocak 2025

Php Static Kullanımı

static anahtar kelimesi, PHP'de sınıfa bağlı özellikler (properties) ve metotlar (methods) tanımlamak için kullanılır. Bu özellik ve metotlara bir nesne oluşturmadan doğrudan sınıf üzerinden erişilebilir.

Normalde bir sınıftaki özellik veya metoda erişmek için bir nesne oluşturman gerekir. Ancak static kullanıldığında, o özellik veya metot sınıfa bağlı hale gelir ve nesne oluşturmadan kullanılabilir.


Static Özellik ve Metotlar

  • Static Özellikler: Sınıfa özgüdür ve tüm nesneler için ortak bir değer taşır.
  • Static Metotlar: Bir nesne yerine sınıf üzerinden çalıştırılır. Static metotlar içinde $this kullanılamaz, çünkü $this bir nesneyi temsil eder.

Static Kullanımına Örnek

<?php class Matematik { // Static bir özellik (tüm sınıflar için ortak) public static $pi = 3.14159; // Static bir metot public static function alanHesapla($yaricap) { return self::$pi * $yaricap * $yaricap; } } // Nesne oluşturmadan static özelliğe erişim echo Matematik::$pi; // Çıktı: 3.14159 // Nesne oluşturmadan static metoda erişim echo Matematik::alanHesapla(5); // Çıktı: 78.53975 ?>

Önemli Notlar:

  1. Static özelliklere ve metotlara self:: veya ClassName:: kullanarak erişilir.
  2. Static özellik ve metotlar nesneye değil, doğrudan sınıfa bağlıdır.
  3. self:: → Sınıf içinden static özelliğe/metoda erişim için kullanılır.
  4. ClassName:: → Sınıf dışından static özelliğe/metoda erişim için kullanılır.

Static Özelliklerin Durumunu Değiştirme

Static özellikler, sınıfa özgü olduğu için her nesnede aynı değeri taşır. Örneğin:

<?php class Sayaç { public static $sayi = 0; public static function arttir() { self::$sayi++; } } // Static özelliği güncelleme ve okuma Sayaç::arttir(); Sayaç::arttir(); echo Sayaç::$sayi; // Çıktı: 2 ?>

Static ile Diğer Özelliklerin Farkı

Eğer static kullanmazsan, her nesne için özellikler farklı olur. Static ise ortak bir özellik/metot sağlar.


Static ve Late Static Binding

Eğer bir sınıftan türeyen sınıflarda static metodun sınıfa özgü davranmasını istersen, static:: kullanmalısın. Örneğin:

<?php class A { public static function kimimBen() { return static::class; // Late Static Binding } } class B extends A { } echo A::kimimBen(); // Çıktı: A echo B::kimimBen(); // Çıktı: B ?>

Php Nesne Yönelimli Programlama Giriş Erişilebilirlik

 <?php


/*
Erişilebilirlik

public
Her yerden erişilebilir.

private
Sadece sınıf içerisinden erişilebilir.

protected
Dışarıdan erişilmez.
Sınıf içinde erişilebilir.
Miras alma yoluyla kullanılabilir.

*/

class User{
public $email;
private $name;
protected $surname;


public function getEmail()
{
return $this->email;
}


public function setEmail($email): void
{
$this->email = $email;
}

public function getSurname()
{
return $this->surname;
}

public function setSurname($surname): void
{
$this->surname = $surname;
}

public function getName()
{
return $this->name;
}

public function setName($name): void
{
$this->name = $name;
}


}

$User = new User();

$User->setName("Mustafa");
$User->setSurname("Yilmaz");
$User->setEmail("email@deneme.com");

echo $User->getEmail();
echo "<br>";
echo $User->getName();
echo "<br>";
echo $User->getSurname();

?>

Php Nesne Yönelimli Programlama Giriş

Nesne Yönelimli Programlama (OOP), PHP'de yazılım geliştirirken kodunu daha düzenli ve tekrar kullanılabilir hale getirmenin güçlü bir yoludur. OOP'yi anlamak, daha büyük projelerde çok işine yarayacak.

OOP'nin temel kavramlarını tanıyalım: Sınıflar (Classes), Nesneler (Objects), Özellikler (Properties), Metotlar (Methods), ve Erişim Belirleyiciler (Access Modifiers).

Basit bir OOP Örneği

Aşağıdaki örnek, OOP'ye giriş için temel bir sınıf ve nesne kullanımını gösterir:

<?php

// 1. Bir sınıf tanımlıyoruz
class Araba {
    // Özellikler (properties)
    public $renk; // Arabanın rengi
    public $marka; // Arabanın markası

    // Constructor (Yapıcı Metot): Nesne oluşturulurken çalışır
    public function __construct($renk, $marka) {
        $this->renk = $renk;  // $this-> özelliğe erişir
        $this->marka = $marka;
    }

    // Metot (Method): Arabanın bilgisini döndüren bir işlev
    public function bilgiGoster() {
        return "Bu araba bir {$this->renk} {$this->marka}.";
    }
}

// 2. Sınıftan bir nesne oluşturuyoruz
$benimArabam = new Araba("kırmızı", "Toyota");

// 3. Nesne üzerinden metoda erişiyoruz
echo $benimArabam->bilgiGoster(); // Çıktı: Bu araba bir kırmızı Toyota.

?>

11 Ocak 2025

PHP Dizin İşlemleri: Daha Derine İnelim

 

PHP Dizin İşlemleri: Daha Derine İnelim

Verdiğiniz örnekler, PHP ile dizin oluşturma ve silme işlemlerinin temelini çok güzel bir şekilde açıklıyor. Ancak, bu konuda daha da derinleşerek, bazı ek noktalara ve olası senaryolara değinmek faydalı olacaktır.

Dizin Oluşturma (mkdir)

  • İzinler (chmod): İkinci parametre olarak verilen 0777 gibi izinler, oluşturulan dizinin okuma, yazma ve yürütme izinlerini belirtir. Ancak, güvenlik açısından tüm kullanıcılar için tüm izinleri vermek her zaman önerilmez. Daha spesifik izinler belirlemek için chmod fonksiyonunu kullanabilirsiniz.
  • Çoklu Dizin Oluşturma: Tek seferde birden fazla dizin oluşturmak için mkdir fonksiyonunu iç içe kullanabilir veya recursive olarak dizin oluşturabilirsiniz.
  • Hata Kontrolü: mkdir fonksiyonu başarısız olursa, nedenini anlamak için error_get_last() fonksiyonunu kullanabilirsiniz.
  • Özel Dizinler: mkdir fonksiyonu ile özel dizinler (örneğin, . ile başlayan gizli dizinler) de oluşturabilirsiniz.

Dizin Silme (rmdir)

  • Boş Dizin Kontrolü: rmdir fonksiyonu sadece boş dizinleri silebilir. Dizin içinde dosya veya alt dizin varsa, önce bunları silmeniz gerekir.
  • Recursive Silme: İç içe dizinleri silmek için recursive olarak rmdir fonksiyonunu kullanabilir veya glob ve unlink kombinasyonuyla tüm dosyaları silerek dizini boşaltabilirsiniz.
  • Hata Kontrolü: rmdir fonksiyonu başarısız olursa, nedenini anlamak için error_get_last() fonksiyonunu kullanabilirsiniz.

Ek Fonksiyonlar ve Konular

  • file_exists: Bir dosya veya dizinin var olup olmadığını kontrol eder.
  • is_dir: Verilen yolun bir dizin olup olmadığını kontrol eder.
  • is_file: Verilen yolun bir dosya olup olmadığını kontrol eder.
  • glob: Belirli bir pattern'e uyan dosya veya dizinlerin listesini döndürür.
  • rename: Bir dosya veya dizinin adını değiştirir.
  • copy: Bir dosyayı veya dizini kopyalar.
  • scandir: Bir dizindeki tüm dosya ve alt dizinlerin listesini alır.
  • realpath: Verilen yolun mutlak yolunu döndürür.
  • dirname: Verilen yolun dizin kısmını döndürür.
  • basename: Verilen yolun dosya adını döndürür.

Güvenlik

  • Göreli Yollar: Güvenlik açıklarından kaçınmak için mutlak yollar kullanın. Göreli yollar, beklenmedik sonuçlara neden olabilir.
  • İzin Kontrolü: Kullanıcıların izinsiz dosyalara erişmesini engellemek için izinleri dikkatli bir şekilde ayarlayın.
  • Girişleri Temizleme: Kullanıcıdan alınan girişleri temizleyerek, dizin yolunda zararlı karakterlerin olmasını önleyin.

Örnek: Recursive Dizin Silme

PHP
function sil($dizin) {
    foreach (glob($dizin . '/*') as $dosya) {
        is_dir($dosya) ? sil($dosya) : unlink($dosya);
    }
    rmdir($dizin);
}

sil('dosyalar/resimler');

Örnek: Çoklu Dizin Oluşturma

PHP
function olustur($dizin, $izinler = 0755) {
    if (!is_dir($dizin)) {
        mkdir($dizin, $izinler, true); // true, recursive oluşturma
    }
}

olustur('dosyalar/resimler/2023');
olustur('dosyalar/belgeler');

Sonuç olarak, PHP ile dizin işlemleri, web uygulamalarında sıkça kullanılan önemli bir konudur. Bu işlemleri yaparken güvenlik, performans ve okunabilirlik gibi faktörleri göz önünde bulundurmak önemlidir. Verilen örnekler ve ek bilgiler, bu konuda daha iyi bir anlayış kazanmanıza yardımcı olacaktır.

Ek olarak, PHP'nin sunduğu diğer dosya ve dizin işlemleriyle ilgili daha fazla bilgi için PHP resmi dokümantasyonunu inceleyebilirsiniz.