Merhaba!
Uzun zaman oldu buralara uğramayalı. Tahmin ettiğiniz gibi artık PHP yazmadığımdan değil tabi! :) Cumartesi günü çok güzel bir etkinlikteydik. Yeni yüzler görme  ve kaliteli bir ekibi tanıma şansım oldu. Yazılım Atölyesi‘nin her ayın 3. Cumarteis gübü düzenlediği atölyeye katılma fırsatım oldu. İlk katılımımda da konuşmacı olarak çağırılmam gurur vericiydi. Etkinlik Hasan Tayyar Beşik‘in Hadoop ve PHP sunumu ile başladı, Büyük dataları (gerçekten büyük ama :) ) işleme ihtiyacı duyarsak nasıl bir yol izlerizin dışında PHP kullanırken böyle bir ihityacınız olursa nasıl bir yol izlersiniz Hadoop size ne sağlar bunu anlattı. Daha önce ihtiyaç duyduğum işler yaptım ama ne yazık ki şuan denemek için yer arıyorum. Ben de denersem buradan deneyimlerimi aktarırım inş. Gelelim organizasyonun kendisine, kaçırmamak için elimden geleni yapacağım. Tayyar’dan sonra sıra bendeydi : ) titrektim lan! başlangıc heyecanlı olsa da katılımcıların kalitesinden olsa gerek ki, sohbete dönüşünce çok eğlenceli bir sunum oldu benim için de. Canlı izleyen arkadaşların özellikle son sorunun, sunumun tüm amacını açıkladığını düşünüyorum. Yani bitişi de güzeldi. Onu da izleyin ben söylemeyeyim : )

Etkinlik videosu : http://www.livestream.com/nbajans/video?clipId=pla_1c1004f5-2f2b-45f9-a64c-9e2971570a06

Sunumum : http://tufanbarisyildirim.com/presentations/php-birakmak-icin-50-sebep/

 

Ve sunumdan birkaç görüntü  ..

Frameworkler birer birer Namespace yapısına geçmeye başladı. Bu da konunun daha çok konuşulmasına ve soruların artmasına neden oldu. Şu adresteki soruları incelemenizi istiyeceğim ( php namespaces at stackoverflow ) 188 çok değil ama zamanım oldukça oradaki soruları da analiz etmeye çalışacağım.

Namespace, bilindiği üzere birçok dilde zaten kullanılan bir yöntem, ve bana göre kütüphanelerin birleştirilmesi / farklı geliştiricilerin oyuna dahil olması anlamında çok gerekli bir özellik. Kısaca neden kullanırız? Bize ne sağlar? Ve buna PHP tarafından bakarsak, nasıl kullanırız? Nelere dikkat etmemiz gerekir bunları yazmaya çalışacağım. Sadece yazılımsal (syntactic) olarak değil, anlamsal olarak da (semantic) bize sağlayacağı kolaylık ve zorluklardan bahsetmek istiyorum.

Hiç namespaces hakkında bilginiz olmadığını düşünerek şöyle somutlaştırmak istiyorum, Tufan diye bir arkadaşınız olduğunu düşün, arkadaşlar arasında bahsederken Tufan onu tanımlar, ve yeni bir Tufan arkadaşınız olunca artık “hangi Tufan?” soruları başlar öncelikle. Problem burda başlar ve siz buna bir çözüm bulursunuz, “Yıldırım Tufan” evet. Çözdünüz. Yazılımda bu problemin çözümü de Namespace ile gelmiş oluyor. Hangi PDF sınıfı? Zend\Pdf sınıfı.

Artık teknik olarak devam edelim,

Namespace Tanımlama:

0
1
2
3
4
5
6
7
8
<?php
namespace Uygulamam
{
 /**
  * Standart olarak bu parantezler arasına yazılacak herşey  "Uygulama" içine dahil olacaktır.
  * çağırılırken bu alanda değilsek  \Uygulama\ önadını kullanacağız.
  */
}
?>

Alternatif bir yazım şekli olarak parantezleri kullanmama özgürlüğmüz de var

0
1
2
3
4
5
6
<?php
namespace Uygulamam
   /**
   * Standart olarak bu satırdan sonra yazılacak herşey  "Uygulama" içine dahil olacaktır.
   */
 
?>

İç içe namespace tanımlamak istediğimizde de “\” ters slash kullanabiliriz, kısaca ornek verelim, namespace, fonksiyonları ve classları özelleştirmemizi sağladığı gibi, namespaceleri de bir namespace dahil ederek özelleştirebiliriz gayet basit.

0
1
2
<?php
   namespace Uygulamam\Mobil\Android;
?>

Normal şartlarda, her namespace için bir dosya kullanmamız önerilir, fakat siz tek dosyada birden fazla namespace kullanmak istiyorsanız, bunların birbirilerini nasıl etkileyeceğini bilmelisiniz, “Mobil” namespace  için tek dosya kullanmak istiyorsak örnek verelim

Bir dosyada birden fazla namespace tanımlarken, parantez kullanımına dikkat etmeliyiz, parantez kullanıyorsak bu namespace içine bir namepsace tanımlanamaz yani kısaca “namespace Uygulama {   namespace Mobil {  }   }“  gibi bir yazım hata sebebedir.
ve aynı dosyada herhangi bir namespace ait kodlar da bulunamaz. Örneği vermeden önce de şunu söylemek gerekiyor ki; alt namespaceler tanımlarken sahip namespace (örn : Uygulama) nin tanımlanmış olmasına gerek yok. Yani biz Uygulama diye bir namespace tanımlamadan Uygulama\Mobil ya da Uygulama\Mobil\Android diye namespace tanımlayabiliriz.

Örnek :

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
//library.php olsun.
namespace Uygulamam\Mobil\Android
    {
        class View
        {
            public function view()
            {
                print 'I will include a view file for ' . __NAMESPACE__;
            }
        }
    }
 
    namespace Uygulamam\Mobil\IPhone
    {
        class View
        {
            public function view()
            {
                print 'I will include a view file for ' . __NAMESPACE__;
            }
        }
    }
 
  namespace Uygulamam\Mobil
  {
     $b = new Android\View();
     $b->view();
  }
 
?>

Örneği çalıştırmanızı rica ediyorum, ve tek dosyada incelemek istediğimiz için böyle bir yazım yaptık, şimdi analiz edelim,

Uygulamam\Mobil\Android ve Uygulamam\Mobil\IPhone alanlarına aynı isimde, aynı medodlara sahip “View” adında bir class tanımladık,  kullanım kısmındaki ayrıntıyı da gösterebilmek için son namespacei “Uygulamam\Mobil” olarak tanımladım, böyle tanımlamak zorunda mıyız? tabi ki hayır, bu namespace içine yazacağımız ve çağıracağımız herşey Uygulamam\Mobil namespace içine dahil olacaktır. Önce kendimizi bir Namespace içine dahil ettik, sınrasında yazdığımız “new Android\View()“  terimi  başında “\” olmadığı için dahil olduğumuz namespace içindeki “Andorid” anlamına geldi yani ” \Uygulamam\Mobil\Android“  oldu çıktıyı da incelersek

“I will include a view file for  Uygulamam\Mobil\Android” Şimdi yeri gelmişken __NAMESPACE__ sabitini de inceleyelim. Tahmin edebileceğiniz gibi bulunduğumuz namespacei tespit etmemizi sağlayan bir sabit (her namespace için değişiyorsa bu nasıl sabittir ?)  sihirli sabitler diye türkçeye çevirebileceğimiz “Magic Constatns” konusunu inceleyebilirsiniz,

“Use”

Karmaşık ve iç içe çok namespace içeren projelerimizde, uzun isimler olacaktır  Örnek : “namespace Uygulamam\Mobil\Android\WebServices\NuSoap” bu alanlar içindeki sınıf ve fonksiyonlara ulaşmak istediğimizde, bu pathı tekrar tekrar yazmak elbette hoşumuza gitmeyecektir, namespace bir zorluk olaacaktır. “use” keywordu bize bu sınıflara o blok içinde kısa isimler vermemiz konusunda yardımcı olacak. Önceki dosyamızın adı “library.php” olsun ve bahsettiğimiz namespacei içine 2 sınıfla beraber tanımlayalım.

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// libraray.php'nin devamı
namespace Uygulamam\Mobil\Android\WebServices\NuSoap
    {
        class Users
        {
            public function getUsers()
            {
                return array('User 1','User 2');
            }
        }
 
        class Posts
        {
            public function getPosts($userId)
            {
                return array('Post 1','Post2 2');
            }
        }
    }
 
?>
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
  /**
  *  Bu uzun ismi her sınıf için tekrar yazmamak için bir alias tanımadık.
  *  artık kısaca Webservice\Users gibi ulaşabiliriz
  */
  use \Uygulamam\Mobil\Android\WebServices\NuSoap as WebService;
 
  include 'library.php';
 
  $usersService = new WebService\Users();
  $postService = new WebService\Posts();
 
  $users = $usersService->getUsers();
 
  var_dump($users);
 
  //output
  /**
     I will include a view file for Uygulamam\Mobil\Android
     array(2) {
      [0]=>
      string(6) "User 1"
      [1]=>
      string(6) "User 2"
    }
  */
?>

“use ” kullanabilmek için bu namespacein tanımlanmış olmasına gerek yok, bu yüzden okunabilirlik için “use” bloklarını hep en üstte tutmaya çalışın. Sadece çağrılınca bunun varlığı kontrol edilir. biz de zaten sonrasında include “library.php” diyerek tanımlamış olduk.

yani şu iki satırın anlamı kısaca şöyledir.

0
1
  $usersService = new WebService\Users(); // new  \Uygulamam\Mobil\Android\WebServices\NuSoap\Users();
  $postService = new WebService\Posts(); // new  \Uygulamam\Mobil\Android\WebServices\NuSoap\Posts();

Örnek Dosyalar: http://www.tufyta.com/wp-content/uploads/2011/10/php-namespaces.zip

– buraya trickler, hatalara sebep olabilecek kullanımlar vs. gelecek –

Not:  Lütfen, eklemek, düzeltmek, sadeleştirmek istediğiniz şeyler varsa, yorum / mail olarak atabilirsiniz, “PHP Namespaces” için kapsamlı bir döküman oluşması konusunda yardımcı olan herkese şimdiden teşekkür ediyorum.

This function can be used for sorting a multidimensional array by sql like order by clause

Uzun yazamicam sanırım, onaydan sonra paket burada, incelemek isterseniz :

http://www.phpclasses.org/package/7041-PHP-Find-the-name-of-a-color-closer-to-a-given-color.html

Merhaba arkadaşlar, takip edenler benim ilk zamanlardan beri yaptıklarımı paylaştığımı bilmekle beraber benim hiç kullanmadığım sınıflar yazdığımı da bilir. Bir araç olabiliyorsa o yazacağınız şey kesinlikle ihtiyacı olan da çıkıyor, Bugüne kadar yazdığım her sınıfa sonradan ihtiyaç duymuşumdur ya da ihtiyacı olan birinin kullandığını görmüşümdür. Eveet bu saatte böyle girilir blogposta kızmak yok okumaya devam. Resimleri renklere göre gruplarken renk töleransı ile ilgili birşeyler yapmaya çalışıyordum, sonrasında da aslında tölerans değil de bana verdiğim renge en yakın isimlendirilmiş renk lazım dedim. Başladım okumaya ve kodlamaya, RGB,HS ve Color Palette benim her zaman üzerinde hesaplar ve çalışmalar yaptığım bilgilerdir, her zaman da beni bu konularda farklı kılmıştır. Seviyorum sizi (:
Az önce phpclasses.org’a attığım sınıf işte tam buna yarıyor, verdiğiniz renk kodunun isimlendirilmiş 1500 renk arasından en yakının adını veriyor size (bu renkleri türkçeleştirip veren biri olursa blogroll’e eklicem).

Şimdilik bu kadar, yayınlanınca direk ordan kod vereceğim, artık blogumda kod kalabalığı yapmayı düşünmüyorum

© 2012 Tufan Suffusion theme by Sayontan Sinha