Son günlerde üzerinde çalıştığım bir projede Text Mining ile ilgili daha derin araştırmalar yapmaya ihtiyaç duyuyorum. İngilizcede Stop words elemek çok kolay, çünkü  büyük-küçük harf duyarlığı devre dışı kaldıktan sonra hiç bir programlama dilinde kelimeyi yakalama ihtimaliniz düşmez. Bu Türkçe için böyle değildir. Türkçe karakterler bazı programlama dillerinde özel işlemler gerektirebiliyor. örn php Mutlibyte String eklentisini sunuyor. işlemlerimizi bu kütüphane ile yaptığımız sürece unicode sorunu yaşamıyoruz. mb_string eklentisinin kurulumu için  şurayı ziyaret edebilirsiniz.Multibyte işlemler dışında yine istisnai durumlarımız olabildiği için bu eklentiği kullanmadan regular expression yardımıyla bir filter hazırladım. bu kütüphanemizin de programlanabilmesini sağladı ve tadından yenmez oldu. şimdi bir örnek verelim. Elemek istediğimiz kelime “bir” olsun. büyük-küçük harf duyarlılığını kaldırdığımızda  “BIR” kelimesi de elenecektir. Türkçede bu kelimeler aynı değil! bir ve BİR aynı olabilir ancak. Her kelime için ayrı bir istisna sinsilesi olabileceği için ben de regexpe başvurdum.

Statik Stopwords Datamız:

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
31
32
33
34
35
36
37
38
39
40
 class stopWords
    {
        public static $stopwords = array(
        'il[ae]',
        'ke[sş]ke',
        'z?([haeiu][haeiu]?)+',
        'mal',
        'aptal',
        'https?\:\/\/[^\s\"\<]+',
        'B[iİ]r',
        'the',
        'g[o]+l',
        'you',
        '[İi][cç]in',
        'his',
        'ilk',
        'iyi',
        'and',
        '[cç]ok',
        'yok',
        'gibi',
        'ama',
        'ma[çc]',
        'her',
        'var',
        'bizim'
        );
 
        public static function FILTER_STOP_WORDS($word)
        {
            foreach(self::$stopwords as $pattern)
            {
                if(preg_match('/^' . $pattern . '$/i',$word))
                {
                    return false;
                }
            }
            return true;
        }
    }
# 3. elemanımız çok komik her gülmeyi yakaladı, dışında kalan birşey bulamadım (: (örnek : zuahaha zhhhh zihihi hiihi haah eheheh ahehehaeh ) bunların hepsini silebildim.

Elbette liste bununla sınırlı değil siz geliştirip , gruplandırıp desenler arttırabilirsiniz bir metin filtreleme örneği de verelim

0
1
2
3
4
     $text = "Tufan attı ve goooooooooooool hahahaha zuahaha ";
    $words = explode(' ',$text);
    $words = array_filter($words,'stopWords::FILTER_STOP_WORDS');
    $text = implode(' ',$words);
   # cıktı : "Tufan attı"

gol kelimesini ben eledim projemde bilgidğin stop word kategorisine giriyor bu (: siz özelleştirip gelitşirebilirsiinz
iyi çalışmalar,

Reflection Nedir ?

Reflection (Yansıma) kısaca açıklanabilecek bir konu olmasa da olabildiğinde örneksel anlatmaya çalışacağım. Reflection bize çalışma anında hiç bilmediğimiz bir yerden gelebilecek bir objeyi ,bir sınıfı veya sınıf elemanını inceleyip hakkında bilgi sahibi olabilme olanağı tanıyor.

Nerde İhtiyaç Duyarız ?

Reflection bize Plugin tabanlı bir sistem hazırlama konusunda çok faydalı olabilir. Modül ve ya Plugin sistemlerinde kullanıcılardan istediğimiz sabit şeyler olabilir.

  • Modülün adı ne ?
  • Nerde çalışmalı ?
  • Hangi şartlarda çalışmalı ?

Bu bilgileri bize modülün kendisi verilmeli değil mi ? verdiği taktirde biz de bunu formatımıza uygun olarak modülün istediği gibi işleyebiliriz. Elimizde modülün kendisine özel sınıflarından birinden türetilmiş bir nesne olduğunu düşünelim. Bu elemanın “name” adında bir propertysi var mı ? “calistir()” adinda bir metodu var mı? Hataları yapımcıya gösterebilmek ve ya Modülü çalıştırabilmek için bunlara ihtiyacımız var . Reflection olayını kısaca kafamızda oluşturmuş olduk.

PHP, 5 ten sonra Reflection adına pek çok yenilik yaptı ve 5.3 ile Reflection gerçek adını aldı (Namespace ile beraber ihtiyaç duyuldu diye tahmin ediyorum.)

PHP’de (script dillerinin genelinde) Reflection olayı özel bir çaba (ekstra sınıflar) gerektirmeden yapılabiliyor. Bunu en iyi yapan script dili tahminimce PHP . Fakat bu olayı adlandırmak ve bir sınıfa toplamak güzel olmuş. İlk önce PHP ‘nin bize Reflector sınıflardan önce Reflection adına sunduğu ve daha önce Lambda konusunda kısaca değindim fonksiyonları incelemek istiyorum.

get_included_files();
get_defined_constants();
get_defined_functions();
get_defined_vars();
get_declared_classes();
get_declared_interfaces();
gettype();
get_called_class();
get_class_methods();
get_class_vars();
get_parent_class();
get_object_vars();
get_extension_funcs();
get_loaded_extensions();

Reflection sınıfı olmadan da bu metotlarla Reflector sınıfımızı yazıp tek tek ReflectionObject ten tutun Reflection sınıfına kadar yazabiliriz.

PHP Reflection sınıfına neden ihtiyaç duydu ?

Bu soruyu kendimize sormamız doğal. Hem bunların hepsini yapabildiğimizi söyledik hem de PHP nin 5.3 ten sonra Reflection olayına isim verdiğini söyledik. Bu işi kendi başımıza halledebiliyorsak neden bize reflection sınıfı yazıldı ? Bunun cevabını yine 5.3 ile beraber gelen özelliklerde aramalıydık ki bu analiz sonucunda çıkarabileceğimiz tek sonuç Namespaces

Namespaceler ile çalışınca sınıflarımıza reflekte olaylarında belki metot belki property hatta bu modifier incelemesi bile yapabiliriz ancak namespace incelemesi yapamayacağımızı verdiğim fonksiyonların isimlerinden bile anlayabiliriz.

Reflection Classes.

The Reflector interface

0
1
2
3
4
Reflector {                abstract public static string export ( void )
 
                abstract public string __toString ( void )
 
}

Tüm export edilebilir Reflection sınıfları bu arayüze sahip olmalıdır. Olmasa dahi sınıflarımız için reflekte işlemleri yapabilirz (Bir daha bu cümleyi kurmamaya özen göstereceğim fakat unutmayın ki Reflection olayını zaten yapabiliyorduk ). Fakat bu arayüz sayesinde diğer reflection sınıfları içinde kullanabileceğimiz objeler oluşturabilir hatasız işlem yapabiliriz.

Reflection sınıflarının 2 temel metodu da parametre almıyor __toString sihirbazını tanıtma fırsatım olmasa da bunları OOP magics sayfasından öğrenebilirsiniz. Export aslında __toString işlevi görüyor diyebiliriz. Fakat biz __toString metodunu sınıfın kendisini explain etmek için kullanırdık Reflecion sınıflarında da exportu Reflekte edilmesi istenen sınıfı explain etmek için kullanacağız.

Kısaca __toString() Sihirbazı

Örnek üzerinden acıklamak istiyorum öncelikle bir sınıfımız olsun.

0
1
2
3
4
class Yazilimci{
 
            public  $name,$surname;
 
 } 

Örnek bir de kullanım yapalım

0
1
2
    $tufan=new Yazilimci();    $tufan->name="Tufan Barış";
 
    $tufan->surname="YILDIRIM";<strong> 

bunu biz “Tufan Barış YILDIRIM” şeklinde yazdırmak istediğimizde

0
   Echo     $tufan->name.” ”. $tufan->surname;<strong> 

Bu kullanım bize ad soyadı verir. Ancak. Buna bir metot hazırlamak istediğimizi varsayaraksak

0
1
2
3
4
5
6
7
8
9
10
class Yazilimci{
 
            public  $name,$surname;
 
            public function  isimYaz()
           {
 
                  return     $tufan->name.” ”. $tufan->surname;
           }
 
    } 

Şimdiki kullanımı ve bu metodun bize sağladığı yararı inceleyelim

0
  Echo  $tufan->isimYaz();

Evet metot bize isimyaz dediğmizde cok güzel bir şekilde ad ve soyadı yazdırıyor .

Peki objeye string gibi davranıp ekrana yazmaya kalkarsak ne olur ?

0
  Echo   $tufan;

Catchable fatal error: Object of class Yazilimci could not be converted to string

Yazilimci türündeki bir obje string e dönüştürülemedi. $tufan değişkeni bizim için bu sınıfın verilerini tutan bloğun işaretçisini (Pointer) tutuyor değil mi ? O zaman bunu ekrana basabilmek için bu bloğun bir string olması gerekiyor ama değil. Şimdi __toString() sihirbazının yaptığı işi görmek için sınıfı tekrar yazalım.

0
1
2
3
4
5
6
7
8
9
10
class Yazilimci{
 
            public  $name,$surname;
 
            public  function  __toString()
           {
 
                  return      $tufan->name.” ”. $tufan->surname;
           }
 
    } 

Şimdi, hata aldığımız kullanımı tekrar denediğimizde ekrana cıkan sonuç “Tufan Barış YILDIRIM” obje stringe dönüştürülmek istendiğinde tetiklenen metodumuz. String dönüştürme ya da string gibi kullanmaya kalkmaya birkaç örnek verelim.

0
1
2
3
4
5
6
Echo  $tufan;<strong>Print  $tufan;
 
Echo  “Yazanın adı :. $tufan;
 
$tamadi=(string)$tufan;
 
 

Bunlara bir örnek daha ekleyebiliriz. String parametre isteyen bir fonksiyona direk bu objeyi vermek gibi. Fakat fonksiyon içerisine girene kadar bu obje olarak kalacaktır. İçerikdei kullanım yine bunlardan biri olacağı için örnek verme gereği duymadım , değinmeden de geçmek istemedim.

The ReflectionProperty class

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 Class ReflectionProperty implements Reflector{
 
/* Constants */
 
const integer ReflectionProperty::IS_STATIC = 1 ;
 
const integer ReflectionProperty::IS_PUBLIC = 256 ;
 
const integer ReflectionProperty::IS_PROTECTED = 512 ;
 
const integer ReflectionProperty::IS_PRIVATE = 1024 ;
 
/* Properties */
 
public $name ;
 
public $class ;
 
/* Methods */
 
final private void __clone ( void )
 
__construct ( mixed $class , string $name )
 
public static string export ( mixed $class , string $name [, bool $return ] )
 
public ReflectionClass getDeclaringClass ( void )
 
public string getDocComment ( void )
 
public int getModifiers ( void )
 
public string getName ( void )
 
public mixed getValue ([ string $object ] )
 
public bool isDefault ( void )
 
public bool isPrivate ( void )
 
public bool isProtected ( void )
 
public bool isPublic ( void )
 
public bool isStatic ( void )
 
public void setAccessible ( bool $accessible )
 
public void setValue ( object $object , mixed $value )
 
public string __toString ( void )
 
} 

ReflectionProperty sınıfı Reflection işlemlerinde elde ettiğimiz her property nin türüdür. Elemanlarını bir bir incelersek ;

Öncelikle üzerinde örneklendirme yapacağımız sınıfımızı tekrar yazalım

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Yazilimci implements Reflector     {
 
         public $name, $surname;
 
         private $girlFriend;
 
         public function __toString()
 
         {
 
             return $this->name." ".$this->surname;
 
         }
 
         public static function export($class,$name,$return=false)
 
         {
 
                return 'Requested Property Name is <b>'.$name.'</b> and Value is <b>'.$class->$name.'</b>';
 
         }
 
     }

$name – Property nin adı . örneğin Yazilimci türünden bir öğemiz olsaydı $surname propertysi için alacağımız değer “ surname “ olacaktı.

$class- Property iyesi sınıfın adına denktir.Yine elimizdeki sınıf için incelersek bunun karşılığı “Yazilimci” olacaktı.

Metotlar

0
public static string export ( mixed $class , string $name [, bool $return ] ) 

Abstract interface (override edilmesi zorunlu) metodlardan biri olan bu metod bize reflector bir sınıf yazrken cıktıyı verebilecek metoddur. Private propertylere ulaşmamızı da sağlamış olacak ve reflection adına bize kolaylık sağlamış olacaktır.

Ilk parametresi export etmek istediğimiz sınıf türünden bir obje name parametresi üzerinde işlem yapmak istediğimiz propertynin adı ve son return parametresi de cıktının geri döneceğini ya da ekrana direk basılacağını belirler.

0
public string __toString ( void )

__toString() elemanını zorunlu kılması belki de Reflection sınıfıın içerde kendisi için yaptığı bir kolaylıktır bilemiyorum. Lakin “Reflection::export” metodunun kullandığı da budur. Bize sadece Export metodunu sadece __toString() gorevi yapmak zorunda olmama ve __toString() i de yine amacı dışında kullanabilme şansı tanımışlar.

Açıklamasını yaptığımız kullanımlara sınıfımız üzerinde bir örnek göstermeden önce ReflectionCLass i tanıyalım:

The ReflectionClass class

ReflectionClass Sınıf reflekte edebileceğimiz yine Reflector kökenli bir sınıf. Propertyleri

0
1
2
3
4
5
6
7
8
9
10
     $reflectMember=new Yazilimci();     $reflectMember->name="Tufan Barış";
 
     $reflectMember->surname="YILDIRIM";
 
     echo '<pre>';
 
     echo Reflection::export($reflectMember);
 
     echo Yazilimci::export($reflectMember,'name');
 
     echo  new ReflectionClass($reflectMember);<strong> 

İlk echo bloğumuzda export() ‘un __toString() i çalıştırdığını tekrar görüyoruz ekrana Tufan Barış YILDIRIM yazıyor. İkincisinde Yazilimci için özelleştirilen export metodundaki kod bloğunu çalıştıracaktır doğal olarak ve bizim sınıf, yazdığımız “Requested Property Name is… ” ile başlayan cümleyi verecektir. Son Blokta ise ReflectionClass oluşturup __toString() metodunun tetiklenmesini sağladık işte genel cıktı

Tufan Barış YILDIRIMRequested Property Name is <b>girlFriend</b> and Value is <b></b>Class [ <user> class Yazilimci implements Reflector ] {

@@ C:\AppServ\www\test\enc.php 2-17

– Constants [0] {

}

– Static properties [0] {

}

– Static methods [1] {

Method [ <user, prototype Reflector> static public method export ] {

@@ C:\AppServ\www\test\enc.php 12 – 16

– Parameters [3] {

Parameter #0 [ <required> $class ]

Parameter #1 [ <required> $name ]

Parameter #2 [ <optional> $return = false ]

}

}

}

– Properties [3] {

Property [ <default> public $name ]

Property [ <default> public $surname ]

Property [ <default> private $girlFriend ]

}

– Methods [1] {

Method [ <user, prototype Reflector> public method __toString ] {

@@ C:\AppServ\www\test\enc.php 7 – 10

}

}

}

Bu cıktı incelenerek oluşan obje hakkında bilgi edinilebilir. Objenin türetildiği sınıfın tanımlandığı dosyanın satır ve sütun numarası dahi var. Metot ve property listesi de modifierlarıyla beraber listeleniyor. Reflection sınıfını bu şekilde ekrana basmak için kullanmayacağız tabi ki. Programda veri niteliği taşıyabilmesi için New ReflectionClass ı bir değişkene atayıp istediğimiz gibi kullanacağız.

Not :

Reflection Sınıfları sadece derleme sırasında (Compile Time) oluşan reflekte bilgisini dikkate alır. Çalışma zamanında (Runtime) oluşan property ve ya metotlar için Reflekte işlemi yapılamaz.

Notunumuzu bir örnekle açıklayacak olursak

0
1
2
3
4
5
6
7
8
9
10
11
12
Class  Reflekte{
 
                public function Reflekte()
 
                {
 
                      $this->yeniProperty=”Yeni değer”
 
                }
 
}
 
 

Böyle bir sınıfımız olduğunu varsayarsak.” yeniProperty “ adındaki propertymiz Constructor içinde oluşmuş olacak ve değer ataması yapılacak . Fakat reflekte işlemine geldiğimizde

0
1
2
3
4
  $reflekte=new Reflekte();
 
 $Reflection=new ReflectionProperty($reflekte,’yeniProperty’); // Hata Fırlatır.
 
 

Reflection Sınıfları

Reflector sınıflarının temeki aynı olduğu için Sadece ReflectionProperty ve ReflectionClass üzerinde durduk. Diğer sınıflarımızda temel aynı sadece kullanım alanı farklı.

Reflector (Interface) – Sınıflarımız reflekte edilebilmesi için bu arayüze sahip olmalıdır.
ReflectionClass – Class Reflekte etmek için tasarlanmış Reflector.
ReflectionExtension – Extension reflekte etkmek için tasarlanmış Reflector.
ReflectionFunction – Fonksiyon reflekte etmek için tasarlanmış Reflector.
ReflectionFunctionAbstract- ReflectionFunction için yazılmış base Reflector.
ReflectionMethod –Metot reflekte etmek için tasarlanmış Reflector.
ReflectionObject – Object Reflekte etmek için tasarlanmış Reflector.
ReflectionParameter –ReflectionFunction içinden ayrıştırılmış Parametreleri reflekte etmek için tasarlanmış Reflector.
ReflectionProperty – ReflectionClass içinden ayrıştırılmış Propertyleri reflekte etmek için tasarlanmıştır aynı zamanda kendi başına da oluşturulup 1 property üzerinde çalışılabilir.

Yazının PDF Versiyonunu Buradan indirebilirsiniz.

PHP – Reflection.pdf

globu test ederken burdan pek bir fark cıkmayacağını tahmin etmiştim.   test ortamım tabi ki değişmedi

PHP  Versiyonu  : 5.3.2
Apache Versiyonu : 2.2
İşlemci : AMD Turion 64 X2 2.20 GHZ
Ram    : 4 GB

test ettiğim dizinin eleman sayısı : 150.000  az da olsa fark görülebilsin diye büyük dizii oluşturmaya çalıştım – ki bu kadar büyük bir dizi ile işimiz olmayacaktır muhtemelen.

dizimizi oluşturalım

0
1
2
3
4
 $myArray=array();
    for($i=0;$i<150000;$i++)
    {
        $myArray[]=uniqid(md5(microtime()));
    }

kullanım şekillerimiz:

0
1
2
3
for($i=0;$i<count($myArray);$i++)
    {
        $a="some actions";
    }

0.143 saniye sürdü

count u forun karar blogundan cıkaralım

0
1
2
3
4
$cnt= count($myArray);
    for($i=0;$i<$cnt;$i++)
    {
        $a="some actions";
    }

0.054 saniye sürdü

gördüğünüz gibi 150 binde yarım saniye fark var. kasıntıya gerek yok daha gerekli yerlerde optimizasyonla uğraşarak sciriptlerimize daha faydalı olabilriz (: ama siz yine de elinizi alıştırmayın

iyi çalışmalar.

Merhaba arkadaşlar bu gece itibari ile (07.06.2010) yeni php kategorimi açmış bulunuyorum. Bugune kadar hep başı siteleriyle belada olan arkadaşlarımıza Optimizasyon tavsiye ettik.Siz de bu “optimizasyon yap(tır)malısın” lafını duymuşsunuzdur. Ama hiç kimseye optimizasyon konusuna nerden başlamalı ya da nasıl başmalı bilgilerini verdiğimi hatırlamıyorum. Optimizasyon önemli.! Bunu Yapın.! Bu yazımda PHP Optimizasyonuna giriş yapmakla beraber ilk tavsiyelerimi de yazmak istiyorum.

PHP ‘yi küçümsemeyin.!

Optimizasyon konusunda değinmek istediğim en önemli şey bu aslında. optimizasyon sadece aşırı tekrar ve ya yanlış seçimlerden kaçmaktır bana göre yani yazdığı şeyi daha doğru yazmaktır. optimizasyon kaynak kullanımında pintilik yapmak değildir. PHP düşündüğünüz kadar küçük bir dil değil. Yazarken korkmayın ( Optimizasyona ihtiyac duyulursa yapın phpnin yeteneklerinden yararlanmayı bilin.) Bana göre esneklikoptimizasyondan önce gelir. İkisi bir arada olmaz mı ? İşte bu kategoriyi açmamın sebebi buydu. Hem esnek hem stabil kod yazabilmek.

Kodunuzu satır satır profillendirin ,tanıtın.

Kodlarınızı her zaman üçüncü bir şahıs okuyacakmış gibi yazmaya çalışın. Ne yapmak istediğinizi karşıdakine anlatırken gereksiz kodlardan kaçındığınızı göreceksiniz.Ve yavaşlatabilecek kısımları da biliyor olacaksınız. Scriptinizi hızlandırma çalışmalarına başlamadan önce scripti yavaşlatan kod bloklarını keşfedin  nereyi optimize edeceğinizi bilin. Ve optimize edeceğiniz yeri bilmeden kodda düzenleme yapmaya başlamayın .!

bunun için güzel bir araç olan APD ye burdan ulaşabilrsiniz.

Yol haritanız olsun.

Scriptiniz üzerinde yapcağınız işlemler önceden planlanmış işlemler olsun (asla plansız kod yazmaya başlamayın). yapacağız optimize işlemleri dahi önceden bir yerlere yazılmış olsun. Bu size hem hız katacaktır hem düzen. Haritanızda Scriptinize versiyon vermeye de çalışın.

En güncel PHP versiyonunu kullanın.

PHP motorunun geliştiricileri de yıllardır performans için düzenlemeler yapıyor.! Bu yüzden PHP yi küçümsemeyin demiştik. Optimizasyon yapmadan ya da yaptırmadan önce ya da hızından şikayet etmeden once php versiyonunuzu yükseltin. versiyon yükseltme işlemlerini de her zaman php.net ten takip edebilirsiniz.

  • Migrating from PHP 4 to PHP 5.0.x
  • Migrating from PHP 5.0.x to PHP 5.1.x
  • Migrating from PHP 5.1.x to PHP 5.2.x
  • Cache mekanizmanızı kurun.

    Ne kadar statik o kadar hız. Cache yapayım derken de abarmayın. Tüm çıktıların saklanması cache değildir ..  Dinamikliği ya da yeniden oluşumu minimuma indirmeye çalışın. Veritabanına kayıtlı olan her şey sayfanızın her işlenmesinde tekrar tekrar sorgulanıp gelmesin. Mekanizmanız extra maliyetler ya da kaynak gereksinimi getirmesin veriyi size hızlı veren  bir uygulama kullanın örn :  Memcache Tema işlemleriniz için de Cache oluşturamıyorsanız Smarty gibi bir uygulama kullanın.

    Output buffer ‘a hükmedin.

    PHP’nin ik önce bellekte oluşturduğu output kullanıcıyı bekletir ve çıktı bitene kadar bellekte birikir. bu birikme sayfalarınızın geç yüklenmesine sebep olabilir. Bazı işlemlerinizde Output ‘u dışarı vermeye zorlayabilir ve hızlandırabilirsiniz.

    Output Buffering Control 

    Getter ve Setter metodlardan kaçının

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    class Yazilimci{
        public $name='';
     
        public function setName( $name )
        {
                 $this->name = $name;
     
         }
         public function getName()
         {
               return $this->name;
         }
    }

    Şu kodda gördüğünüz gibi setName() ve getName() size name elemanını saklamak ve vermek dışında hiç birşey yapmıyor.

    0
    1
    2
    
    $yazilimci=new Yazilimci;
    $yazilimci->setName('Tufan Barış YILDIRIM');
    echo $yazilimci->getName();

    setName() fonksiyonunda yapmak istediklerimiz olursa. ( onNameChanged olayı gibi ) o zaman bu metodların bir anlamı olur.

    Direk name elemanını kullanmanız hızını %100 arttıracaktır.

    0
    1
    2
    
    $yazilimci=new Yazilimci;
    $yazilimci->name='Tufan Barış YILDIRIM';
    echo $yazilimci->name;

    Gerek duymadıkça kopya değişkenler oluşturmayın

    PHP scriptlerimizde dışardan parametre alma ihtiyacı duyarız. Bu son kullanıcıya sağladığımız ya da programlamada kendimize sağladığımız bir kolaylık olabilir. Bu parametrelerin de bir süzgece ihtiyacı vardır “cleaner functions”  . Dışardan bize  500 KB boyutunda bir verinin textare aracılığı ile gönderildiğini düşünelim. bizim bunu yeni bir dğeişkene atamamız 1 MB bellek harcamamız anlamına gelir.

    0
    1
    
       $konuMetni = strip_tags($_POST['konu_metni']);
       echo $konuMetni;

    Inline operasyonlar yapın ram kullanımızı çok düşürecektir.

    0
    
    echo strip_tags($_POST['konu_metni']);

    Kullandığınız veritabanının yeteneklerini öğrenin.!

    Veritabanı sadece veri saklamak için değildir.! Veritabanı  hızlı ve düzenli ulaşım  ve saklama yapabilir. Yeteneklerinden en iyi şekilde faydalanmamız demek sorguların azalması , bu da hızın artması demektir. 

    Döngü içine sorgu yazmak yerine JOIN , istisnai durumlar da SUB QUERY  işlemlerine başvurmalıyız. 
    Çoklu insert örneği vermemiz gerekirse

    0
    1
    2
    3
    
    foreach ($yazilimcilar as  $yazilimci) {
      $query = 'INSERT INTO  yazilimcilar (adi,soyadi) VALUES("' . $yazilimci['adi'] . '", "' . $yazilimci['soyadi'] . '")';
      mysql_query($query);
      }

    bu kullanım $yazilimcilar sayısı kadar mysql_query çalıştırmaya sebep olacaktır.
    MYSQL INSERT kalıbını incelediğimizde bunu tek sorgu ile yapabildiğimizi görüyoruz. O halde bu yeteneğinden faydalanalım.

    ..  devamı gelecek

    © 2012 Tufan Suffusion theme by Sayontan Sinha