Tag Archives: php

Laravel 4 Pagination HTMLi Özelleştirme

Laravel 4’ün mükemmel bir sayfalama (pagination) özelliği var. Bu pagination default olarak Bootstrap 2 destekli. Yani siz bu özelliği kullanıp sayfa numaralarını ekrana bastığınız zaman, uygulamanız Bootstrap 2 uyumlu ise hiç bir sıkıntı yaşamıyorsunuz. Amma ve lakin, zurb murb kullanıyorsanız olmaz 🙁

Continue reading

Mockery ile Mock objeleri yaratmak

Önceki yazılarımda tddye giriş yapıp mock objelerini herhangibir araç kullanmadan yaratmıştık. İşte o yazılar:

Test Driven Development (TDD) Nedir?

PHPUnit Nasıl Kullanılır

Test Edilebilir Kod Üretmek

Birim (Unit) Testlere giriş

Mockery Nedir?

Mockery php test araçları ile kullanılabilen basit ama esnek PHP Mock obje frameworküdür.

Continue reading

TDD: Test Edilebilir Kod Üretmek

Daha önceki 2 yazımda TDD hakkında konuştuk ve PHPUnit aracını nasıl kullanacağımıza dair basit bir giriş yapmıştık. Aşağıdaki linklerden ulaşabilirsiniz.

Test Driven Development (TDD) Nedir?

PHP ve TDD: PHPUnit Nasıl Kullanılır?

Giriş

Test yapabilmenin en güzel özelliği, test edilebilir kod oluşturduğunuzda kodunuzun kendiliğinden onarılması ve genişletilmesi kolay bir koda dönüşmesi. Kısacası test yapabilmeniz için kalite bir kod üretmeniz gerekiyor. Kaliteli kod üretmek bir kaç prensip bunları uyguladığınızda kodunuz test edilebilir olacaktır.

Continue reading

Güvenlik: Şifre ve Hash üretmek (Şifre gizleme)

Hashlemek, bir metnin bir daha geri döndürülemeyecek bir şekilde şifrelenmesidir şeklinde kısaca anlatabiliriz.

Neden?

Dünyadaki bir çok sistem kullanıcı adı, şifre girişine sahip. Bunlar genel olarak veritabanında saklanır. Eğerki olurda, istenmedik bir kişi veritabanına erişirse, ne olacak ? Bu yüzden kullanıcıların şifrelerini bir daha geri döndürülemeyecek şekilde şifreliyoruz ve o şekilde saklıyoruz. Bu şekilde istenmeyen kişi SQL Injection veya benzeri bir yöntem ile veritabanına eriştiği zaman kimsenin şifresini ele geçirememiş olacak.

Continue reading

Otomatik Yüklenen Sınıflar (Auto-loading classes)

Otomatik yüklenen sınıflar tek bir yerden kullanılacak sınıfları yüklemeye olanak sağlar. Otomatik yüklenen sınıflarda, kullanılmayan sınıfların dosyaları yüklenmezler (include edilmez), bu yüzden etkili bir yoldur. Ancak her bir sınıfı tek tek yüklemek performans açısından daha etkilidir ama bir süre sonra kod karma karışık bir hale dönünce keşke dememek lazım. Continue reading

Kodlama Stilleri (PSR-0)

PHP Topluluğu inanılmaz büyük ve sayısız framework ve kütüphaneye sahip. Herkes kendi projelerine bu kütüphaneleri dahil etmek ister. Kodlama stilleri ile amaçlanan bu kütüphaneleri sıkıntısız bir şekilde projelerimize dahil etmek (elinden geldiğince). Framework Interop Group bazı kodlama stilleri önermişlerdir. Bunlar: PSR-0PSR-1 ve PSR-2 Bu standartlar farklı geliştiriciler tarafından sizin kodlarınızı kolay bir şekilde düzenlemesine olanak sağlamaktır. Bu yazımda ise PSR-0’dan bahsedeceğim. Continue reading

PHP: Composer Nedir? Nasıl Kullanılır?

Composer konusunda fazla Türkçe kaynak göremedim onun için burada Composer hakkında bir kaç şey anlatmak istedim. Composer’ın özelliklerinden bir tanesi, yazılımınızın veya kütüphanenizin ihtiyaç duyduğu diğer kütüphaneleri belirtebilmenizdir. Yani siz yaptığınız projenin nelere bağlı olduğunu, hangi kütüphanelere ihtiyaç duyduğunu belirtirsiniz ve Composer sizin için bunları indirir, kurar. Siz kullanıcıya yazılımınızı verirken içerisine bu ek kütüphaneleri eklemek zorunda kalmazsınız. Bu bağımlılıklardan bir taneside PHP versiyonunu belirtebilmeniz. Sizin yazılımınız minimum PHP 5.3 sürümünde çalışıyor ve kullanıcı 5.2 sürümüne sahip ise yazılımınız yüklenmez ve sizde bu ek yükü sırtınızdan atmış olursunuz. Continue reading

PHP & JQuery ile Comet Programlama

Günümüzün kaçınılmaz programlama tekniği olan comet programlamayla ilgili basit bir anlatım ve örnek olacak.

Comet programlama’nın amacı nedir?

Bildiğiniz gibi PHP ve JQuery ile yapabilecekleriniz sınırlı, çünkü sunucu ile ilişkiniz sayfa yüklendiği anda biter. Chat gibi uygulamalarda sunucuyla sürekli bağlantıya ihtiyaç duyarız, bunu aslında küçük bir hile ile ekstradan hiç bir tool kullanmadan halledeceğiz.

Başlarken…

Amacımız sunucu ile sürekli bağlantı sağlamak, yani bağlantımızı koparmamak. Madem sayfa yüklenmesi bittiği anda sunucu ile bağlantımız kesiliyor, bizde sayfanın yüklenmesini hiç bitirmeyeceğiz Nasıl? Sonsuz döngü ile. 🙂 Comet’teki asıl mantıkta burada. Sürekli bağlığız ne zaman ki yeni bir istek geldi (Mesela chat uygulamasında mesaj gelmesi) o zaman bağlantımızı kopartıyoruz yani sonsuz döngümüz bitiyor ve işlemek istediğimiz veriyi işliyoruz ve hemen ardından tekrar sunucu ile bağlantıda kalacak bir php sayfasını çağırıyoruz. Görüldüğü gibi çok zor değil. Şimdi gelelim Facebook, Gmail vs. gibi siteler bu işi nasıl yapıyor? Tamamen aynı! Şimdi size facebook’unuz açıkken arka planda ne olduğuna dair bir resim göstereceğim;

comet

En aşağıda gördüğünüz istek sürekli çalışıyor, yüklenmesi hiç bitmiyor, az önce anlattığım tekniği uyguluyor yani. Comet programlama ile yapılan örneklerde genelde veritabanı yerine dosyalar kullanılır. Bana göre bu pek gerçekçi bir örnek olmadığı için, size veritabanı ile bu işi nasıl halledeceğiz onu göstereceğim. Öncelikle az önce bahsettiğim sonsuz döngümüzde neler olduğunu bir anlatayım, daha sonra bu örneklerde neden veritabanı kullanılmıyor bunu sizde anlayabileceksiniz. Sonsuz döngümüz her zaman şunun kontrolünü yapar; Ben en güncel veriyi aldığımdan beri bir değişiklik olmuş mu? Şimdi eğerki veritabanı ile bu işi yaparsanız, yani siz en güncel veriyi aldığınızdan beri daha güncel veri gelmiş mi diye kontrol ederken veritabanı kullanırsanız şu olur; Sonsuz döngümüz 10 milisaniyede bir kontrol yapacak (10 ms sınırlamasını biz getireceğiz) 10 ms’de bir, veritabanı kontrolü yapılırsa ne olur? Siz tahmin edin 🙂 Dosya ile uygulanmasının sebebi şudur; En son güncel veriye sahip miyiz değil miyiz diye yaptığımız kontrolü dosyanın son değiştirme tarihine bakarak öğrenilir. Dosyanın son değişme tarihi bizim elimizde olan son değişme tarihinden büyükse daha güncel bir veri gelmiş ve hemen bunu alalım demek oluyor. Veritabanından 10 ms’de bir çekmekten çok daha etkili bir yöntem. Şimdi asıl sorunumuz neymiş? Veri en son ne zaman güncellendi bunun bilgisini sunucuda bir yerde saklamalıyız. Benim çözümüm bellekte tutmak yani; PHP’de memcache kullanmak. Bu yöntem ile dosya ile yapılan uygulamadan çok daha hızlı ve etkili erişebiliriz verimize. Eğerki windows kullanıcı iseniz memcache eklentisini php sunucunuza kurmanız gerekiyor, google’dan destek alabilirsiniz 🙂

Continue reading

PHP: Singleton Pattern

Amaç:

Bir classtan sadece bir instance(obje) oluşturulması.

Gerçek hayattan örnekler:

  • Bir bilgisayarda bir tane mouse cursor’ı olmalı.
  • Her bilgisayar ağ üzerinde bir tane internet bağlantısına ihtiyaç duyar. (Diğer bilgisayarlar aynı bağlantıyı kullanır, yeni bağlantı oluşturulmaz)

Nasıl yapacağız:

Öncelikle dışarıdan yeni obje üretimi engellememiz gerekiyor. Bunun için class’ın constructor’ını  private yapıyoruz. Kullanıcıların(programcı veya kendiniz) class’a ulaşmaları için static method belirliyoruz. Static method objeye ait değildir class’a aittir. Bu yüzden adı üstünde statiktir.

Örnek (veritabanı bağlantısı):

Bir web sayfamız olduğunu düşünelim, 4 kere require_once çağırıyor. ve çağırdığı her dosya veritabanı bağlantısı kuruyor. Gereksiz yere 4 tane veritabanı bağlantısı kurmuş oluyoruz bu durumda. 1 tane kurarak hepsini onun üzerinden yapmamız gerekiyor. Aşağıdaki örnekte sadece 1 tane PDO objesi yaratılıyor.

class SingletonDB {
    private static $instance;
    private function __constructor() {}
    public static function getInstance() {
        if (!isset(self::$instance)) {
            self::$instance = new PDO('mysql:host=localhost;dbname=test',"root","şifre");
        }
        return self::$instance;
    }
}

Çağırılış şekli: Static fonksiyonlar objeye ait olmadıkları için obje ismiyle değil class ismiyle çağırılırlar.

$db = SingletonDB::getInstance();
$stmt = $db->prepare("SELECT * FROM liste WHERE id = ?");
$stmt->execute(array(1));
$sonuc = $stmt->fetchAll();
print_r($sonuc);

gibi 🙂