diff options
Diffstat (limited to 'tr-tr')
| -rw-r--r-- | tr-tr/c-tr.html.markdown | 484 | ||||
| -rw-r--r-- | tr-tr/php-tr.html.markdown | 682 | 
2 files changed, 1166 insertions, 0 deletions
| diff --git a/tr-tr/c-tr.html.markdown b/tr-tr/c-tr.html.markdown new file mode 100644 index 00000000..50bca246 --- /dev/null +++ b/tr-tr/c-tr.html.markdown @@ -0,0 +1,484 @@ +--- +name: c +category: language +language: c +filename: learnc-tr.c +contributors: +    - ["Adam Bard", "http://adambard.com/"] +translators: +    - ["Haydar KULEKCI", "http://scanf.info/"] +lang: tr-tr + +--- +/* +C halen modern yüksek performans bilgisayarların dili. + +C bir çok programcının kullandığı en düşük seviye dillerdendir, ama +salt hız ile daha fazlasını karşılar. C'nin bellek yönetiminden iyi +anlarsanız sizi isteğiniz yere götürecektir. + +```c +// Tek satır yorum // karakterleri ile başlar + +/* +Çoklu satırlı yorumlar bu şekilde görünür. +*/ + +// C Standart kütüphanelerini uygulamanıza #include<ornek.h> ile  +// dahil edebilirsiniz. +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +// Kendi başlık(header) dosyalarınız dahil etmek için "çift tırnak"  +// kullanmalısınız. +#include "my_header.h" + +// Fonksiyonlarınızı bir .h dosyasında ya da c dosyanızın üst tarafta  +// tanımlayın. + +void function_1(); +void function_2(); + +// Programınızın giriş noktası main isimli bir fonksiyondur ve  +// integer değer döner +int main() { + +    // çıktıları yazdırmak için printf kullanılır, "print formatted" +    // %d bir sayı tipidir, \n yeni satır karakteridir +    printf("%d\n", 0); // => 0 karakteri yazdırılır. +    // Tüm ifadeler noktalı virgül ile bitmelidir. + +    /////////////////////////////////////// +    // Tipler +    /////////////////////////////////////// + +    // Değişkenleri kullanmadan önce tanımlamalısınız. Bir değişken tanımlarken +    // tipini belirtmelisiniz; bu tip onun byte olarak boyutunu belirler. + +    // int değişken tipi 4 byte boyutundadır. +    int x_int = 0; + +    // short değişken tipi genellikle 2 byte boyutundadır. +    short x_short = 0; + +    // char tipi 1 byte boyutunu garanti eder.  +    char x_char = 0; +    char y_char = 'y'; // Karakterler '' işaretleri arasına yazılır. + +    // long tipi 4-8 byte olur; long long tipi en azından 64 bit garantiler. +    long x_long = 0; +    long long x_long_long = 0;  + +    // float tipi 32-bit kayan noktalı sayı boyutundadır. +    float x_float = 0.0; + +    // double değişken tipi 64-bit kayan noktalı yazı tipindedir.  +    double x_double = 0.0; + +    // Integral türleri işaretsiz olabilir. Bunun anlamı, onlar eksi değer  +    // olamaz demektir, ama aynı boyuttaki işaretsiz bir sayının maksimum  +    // değeri işaretli bir sayının maksimum değeriden büyük olur. +    unsigned char ux_char; +    unsigned short ux_short; +    unsigned int ux_int; +    unsigned long long ux_long_long; + +    // Diğer taraftan char, ki her zaman bir byte boyutundadır, bu tipler  +    // makinenize göre boyut değiştirir. sizeof(T) size bir değişkenin byte  +    // cinsinden boyutunu verir öyle ki bu tipin boyutunu taşınabilir bir  +    // şekilde ifade edilebilir +    // Örneğin, +    printf("%lu\n", sizeof(int)); // => 4 (bir çok makinede 4-byte words) + +    // If the argument of the `sizeof` operator an expression, then its argument +    // is not evaluated (except VLAs (see below)). +    // The value it yields in this case is a compile-time constant. +    int a = 1; +    size_t size = sizeof(a++); // a++ is not evaluated +    printf("sizeof(a++) = %zu where a = %d\n", size, a); +    // prints "sizeof(a++) = 4 where a = 1" (on a 32-bit architecture) + +    // Diziler somut bir boyut ile oluşturulmalıdır. +    char my_char_array[20]; // Bu dizi 1 * 20 = 20 byte alan kaplar +    int my_int_array[20]; // Bu dizi 4 * 20 = 80 byte alan kaplar +                          // (4-byte bir word varsayılır) + +    // Şu şekilde bir diziyi 0 ile oluşturabilirsiniz: +    char my_array[20] = {0}; + +    // Dizinin elemanlarını indexlemek diğer diller gibidir, veya  +    // diğer diller C gibi. +    my_array[0]; // => 0 + +    // Diziler değişebilirdir (mutable); O sadece memory! +    my_array[1] = 2; +    printf("%d\n", my_array[1]); // => 2 + +    // In C99 (and as an optional feature in C11), variable-length arrays (VLAs) +    // can be declared as well. The size of such an array need not be a compile +    // time constant: +    printf("Enter the array size: "); // ask the user for an array size +    char buf[0x100]; +    fgets(buf, sizeof buf, stdin); + +    // strtoul parses a string to an unsigned integer +    size_t size = strtoul(buf, NULL, 10); +    int var_length_array[size]; // declare the VLA +    printf("sizeof array = %zu\n", sizeof var_length_array); + +    // A possible outcome of this program may be: +    // > Enter the array size: 10 +    // > sizeof array = 40 + +    // String'ler bir NUL (0x00) byte ile sonlandırılmış karakter dizileridir, +    // bu string içerisinde özel bir karakter olan '\0' ile gösterilir. +    // (Biz Nul byte'i string karakterleri arasında bulundurmamıza gerek  +    // yoktur; derleyici onu bizim için dizinin sonuna ekler.) +    char a_string[20] = "This is a string"; +    printf("%s\n", a_string); // %s bir string formatıdır. + +    /* +    a_string 16 karakter uzunluğundadır.  +    17. karakter NUL karakteridir. +    18., 19. ve 20. karakterler tanımsızdır.(undefined) +    */ + +    printf("%d\n", a_string[16]); // => 0 +    // i.e., byte #17 is 0 (as are 18, 19, and 20) + +    // If we have characters between single quotes, that's a character literal. +    // It's of type `int`, and *not* `char` (for historical reasons). +    int cha = 'a'; // fine +    char chb = 'a'; // fine too (implicit conversion from int to char) + +    /////////////////////////////////////// +    // Operatörler +    /////////////////////////////////////// + +    int i1 = 1, i2 = 2; // Çoklu tanımlama için kısayol. +    float f1 = 1.0, f2 = 2.0; + +    // Aritmatik basittir. +    i1 + i2; // => 3 +    i2 - i1; // => 1 +    i2 * i1; // => 2 +    i1 / i2; // => 0 (0.5'dir ama 0 a yuvarlanmıştır.) + +    f1 / f2; // => 0.5, artı veya eksi epsilon + +    // Modüler aritmetikte vardır. +    11 % 3; // => 2 + +    // Karşılaştırma operatörleri muhtemelen tanıdıktır, ama +    // C'de boolean tipi yoktur. Bunun yerine sayı(int) kullanırız. +    // 0 false yerine ve diğer herşey true yerine geçmektedir.  +    // (Karşılaştırma operatörleri her zaman 0 veya 1 dönmektedir.) +    3 == 2; // => 0 (false) +    3 != 2; // => 1 (true) +    3 > 2; // => 1 +    3 < 2; // => 0 +    2 <= 2; // => 1 +    2 >= 2; // => 1 + +    // Sayılar üzerinde mantık işlemleri +    !3; // => 0 (Logical not) +    !0; // => 1 +    1 && 1; // => 1 (Logical and) +    0 && 1; // => 0 +    0 || 1; // => 1 (Logical or) +    0 || 0; // => 0 + +    // Bit boyutunda işlem yapmak için operatörler +    ~0x0F; // => 0xF0 (bitwise negation) +    0x0F & 0xF0; // => 0x00 (bitwise AND) +    0x0F | 0xF0; // => 0xFF (bitwise OR) +    0x04 ^ 0x0F; // => 0x0B (bitwise XOR) +    0x01 << 1; // => 0x02 (bitwise left shift (by 1)) +    0x02 >> 1; // => 0x01 (bitwise right shift (by 1)) + +    // Be careful when shifting signed integers - the following are undefined: +    // - shifting into the sign bit of a signed integer (int a = 1 << 32) +    // - left-shifting a negative number (int a = -1 << 2) +    // - shifting by an offset which is >= the width of the type of the LHS: +    //   int a = 1 << 32; // UB if int is 32 bits wide + +    /////////////////////////////////////// +    // Kontrol Yapıları +    /////////////////////////////////////// + +    if (0) { +      printf("I am never run\n"); +    } else if (0) { +      printf("I am also never run\n"); +    } else { +      printf("I print\n"); +    } + +    // While Döngüsü +    int ii = 0; +    while (ii < 10) { +        printf("%d, ", ii++); // ii++, ii değişkenini değerini kullandıktan sonra artırır. +    } // => prints "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " + +    printf("\n"); + +    int kk = 0; +    do { +        printf("%d, ", kk); +    } while (++kk < 10); // ++kk, kk değişkeninin değerini kullanmadan önce artırır. +    // => prints "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " + +    printf("\n"); + +    // For Döngüsü +    int jj; +    for (jj=0; jj < 10; jj++) { +        printf("%d, ", jj); +    } // => prints "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " + +    printf("\n"); + +    /////////////////////////////////////// +    // Tip Dönüşümleri +    /////////////////////////////////////// + +    // C'de her değer bir tipe sahiptir, ama siz bir değeri bir başka tipe  +    // dönüştürebilirsiniz. + +    int x_hex = 0x01; // Hex literatüründe değer atayabilirsiniz. + +    // Türler arasındaki dönüşümde kendi değerini korumak için çalışacaktır. +    printf("%d\n", x_hex); // => Prints 1 +    printf("%d\n", (short) x_hex); // => Prints 1 +    printf("%d\n", (char) x_hex); // => Prints 1 + +    // Tip hiçbir hata vermeden taşacaktır(overflow). +    printf("%d\n", (unsigned char) 257); // => 1 (Max char = 255 eğer karakter 8 bit uzunluğunda ise) + +    // `char`, `signed char` ve `unsigned char` karakter tiplerinin maksimum uzunluğunu  +    // belirlemek için <limits.h> kütüphanesindeki CHAR_MAX, SCHAR_MAX ve UCHAR_MAX  +    // macrolarını kullanınız. + +    // Integral tipi kayan noktalı yazı tipine dönüştürülecektir ve tam tersi.  +    printf("%f\n", (float)100); // %f formats a float +    printf("%lf\n", (double)100); // %lf formats a double +    printf("%d\n", (char)100.0); + +    /////////////////////////////////////// +    // İşaretçiler (Pointers) +    /////////////////////////////////////// + +    // Bir işaretci bellek adresini barındıran bir değişkendir. Tanımlaması ile işaret  +    // edeceği verinin tipi de belirtilecektir. Değişkenlerininzi bellek adreslerini  +    // getirerek bellek ile ilgili karışıklığı ortadan kaldırabilirsiniz.  + +    int x = 0; +    printf("%p\n", &x); // & işareti bir değişkenin bellek adresini getirmek için kullanılır.  +    // (%p işaretçilerin formatıdır) +    // => Bazı bellek adresleri yazdırılacaktır. + + +    // İşaretçiler tanımlanırken * ile başlar +    int *px, not_a_pointer; // px sayı tipinde bir işaretçidir.  +    px = &x; // X değişkeninin bellek adresi px değişkeninde tutulmaktadır. +    printf("%p\n", px); // => x değişkeninin bellek adresi yazdırılacaktır.  +    printf("%d, %d\n", (int)sizeof(px), (int)sizeof(not_a_pointer)); +    // => 64-bit sistemde "8, 4" yazdırılacaktır. + +    // İşaretçinin adres olarak gösterdiği yerdeki değeri almak için  +    // değişkenin önüne * işareti ekleyiniz. +    printf("%d\n", *px); // => 0 bastıracaktır, x in değeridir,  +                         // çünkü px değişkeni x in adresini göstermektedir. + +    // Ayrıca siz işaretçinin gösterdiği yerin değerini  +    // değiştirebilirsiniz. Burada referansı parantez içerisinde göstereceğiz  +    // çünkü ++ işleminin önceliği * işleminden yüksektir. +    (*px)++; // px'in işaret ettiği değeri 1 artır.  +    printf("%d\n", *px); // => 1 yazdırılır. +    printf("%d\n", x); // => 1 yazdırılır. + +    int x_array[20]; // Diziler(arrays) bellekten yan yana bellek bloklarını  +                     // tahsis etmek için iyi bir yöntemdir. +    int xx; +    for (xx=0; xx<20; xx++) { +        x_array[xx] = 20 - xx; +    } // x_array dizisi 20, 19, 18,... 2, 1 değerleri ile oluşturuluyor. + +    // Bir sayı tipinde işaretçi tanımlanıyor ve x_array'i işaret ediyor. +    int* x_ptr = x_array; +    // x_ptr artık dizinin ilk elemanını işaret etmektedir (the integer 20). +    // Bu çalışacaktır çünkü diziler(arrays) aslında sadece onların ilk  +    // elemanlarını gösteren birer işaretçidir. +    // For example, when an array is passed to a function or is assigned to a pointer, +    // it decays into (implicitly converted to) a pointer. +    // Exceptions: when the array is the argument of the `&` (address-od) operator: +    int arr[10]; +    int (*ptr_to_arr)[10] = &arr; // &arr is NOT of type `int *`! +                                  // It's of type "pointer to array" (of ten `int`s). +    // or when the array is a string literal used for initializing a char array: +    char arr[] = "foobarbazquirk"; +    // or when it's the argument of the `sizeof` or `alignof` operator: +    int arr[10]; +    int *ptr = arr; // equivalent with int *ptr = &arr[0]; +    printf("%zu %zu\n", sizeof arr, sizeof ptr); // probably prints "40, 4" or "40, 8" + +    // Diziler ilk elemanlarını gösteren birer işaretçidirler. +    printf("%d\n", *(x_ptr)); // => 20 yazılacaktır. +    printf("%d\n", x_array[0]); // => 20 yazılacaktır. + +    // İşaretçiler kendi tiplerinde artırılır ve azaltılır.  +    printf("%d\n", *(x_ptr + 1)); // => 19 yazılacaktır. +    printf("%d\n", x_array[1]); // => 19 yazılacaktır. + +    // Ayrıca dinamik olarak bir bellek bloğunu standart kütüphanede bulunan  +    // malloc fonksiyonu ile uygulamanız için ayırabilirsiniz. Bu fonksiyon  +    // byte türünden ayırmak istediğiniz bloğun boyutunu parametre olarak alır.  +    int* my_ptr = (int*) malloc(sizeof(int) * 20); +    for (xx=0; xx<20; xx++) { +        *(my_ptr + xx) = 20 - xx; // my_ptr[xx] = 20-xx 'de aynı zamanda çalışabilir +    } // Bellekte 20, 19, 18, 17... 2, 1 (as ints) şeklinde oluşturulmuş olacaktır. + +    // Eğer ayrımadığınız bir bellek adresini çağırırsanız +    // öngörülmeyen bir değer dönecektir.  +    printf("%d\n", *(my_ptr + 21)); // => kim-bilir-ne-yazacak? + +    // Malloc fonksiyonu ile ayrıdığınız bellek kısmı ile işiniz bittiğinde  +    // onu free fonksiyonu ile boşaltmalısınız, aksi durumda uygulamanız  +    // kapatılana kadar belleğin o kısmını kimse kullanamaz.  +    free(my_ptr); + +    // Metin Dizileri(String) birer karakter dizisidir(char array), ama +    // genelde karakter işaretçisi olarak kullanılır. +    char* my_str = "This is my very own string"; + +    printf("%c\n", *my_str); // => 'T' + +    function_1(); +} // main fonksiyon sonu + +/////////////////////////////////////// +// Fonksiyonlar +/////////////////////////////////////// + +// Fonksiyon tanımlama sözdizimi: +// <return type> <fonksiyon adi>(<args>) + +int add_two_ints(int x1, int x2){ +    return x1 + x2; // bir değer geri döndürmek için return kullanılır. +} + +/* +Fonksiyonlar pass-by-value'dür, ama isterseniz işaretçi referanslarını  +kullanarak fonksiyona gönderilen parametrenin değerini değiştirebilirsiniz.  + +Example: Bir metni tersine çevirme +*/ + +// Bir void konksiyonu hiç bir değer dönmez +void str_reverse(char* str_in){ +    char tmp; +    int ii=0, len = strlen(str_in); // Strlen C'nin standart kütüphanesinin bir fonksiyonu +    for(ii=0; ii<len/2; ii++){ +        tmp = str_in[ii]; +        str_in[ii] = str_in[len - ii - 1]; // sondan ii'inci elemanı +        str_in[len - ii - 1] = tmp; +    } +} + +/* +char c[] = "This is a test."; +str_reverse(c); +printf("%s\n", c); // => ".tset a si sihT" +*/ + +/////////////////////////////////////// +// Kullanıcı Tanımlı Tipler ve Yapılar +/////////////////////////////////////// + +// Typedef'ler bir tip takma adı oluşturur. +typedef int my_type; +my_type my_type_var = 0; + +// Struct'lar bir veri koleksiyonudur.  +struct rectangle { +    int width; +    int height; +}; + +// It's not generally true that +// sizeof(struct rectangle) == sizeof(int) + sizeof(int) +// due to potential padding between the structure members (this is for alignment +// reasons). [1] + +void function_1(){ + +    struct rectangle my_rec; + +    // "." ile yapı üyelerine ulaşılabilir. +    my_rec.width = 10; +    my_rec.height = 20; + +    // Bir yapının adresini işaretçiye atayabilirsiniz. +    struct rectangle* my_rec_ptr = &my_rec; + +    // İşaretçi üzerinden bir yapıya ulaşabilirsiniz.  +    (*my_rec_ptr).width = 30; + +    // ya da -> işareti ile yapının elemanlarına ulaşabilirsiniz.  +    my_rec_ptr->height = 10; // (*my_rec_ptr).height = 10; ile aynıdır. +} + +// Kolaylık sağlamak için bir yapıya typedef tanımlayabilirsiniz.  +typedef struct rectangle rect; + +int area(rect r){ +    return r.width * r.height; +} + +/////////////////////////////////////// +// Fonksiyon İşaretçiler +/////////////////////////////////////// + +/* +Çalışma zamanında, fonksiyonların bilinen bir bellek adresleri vardır. Fonksiyon +işaretçileri fonksiyonları direk olarak çağırmayı sağlayan veya geri bildirim(callback) +için parametre gönderirken kullanılan başka birer işaretçidirler. Ama, syntax tanımı  +başlangıçta biraz karışık gelebilir.  + +Örnek: bir işaretçiden str_reverse kullanımı +*/ +void str_reverse_through_pointer(char * str_in) { +    // f adında bir fonksiyon işaretçisi tanımlanır. +    void (*f)(char *); // Signature should exactly match the target function. +    f = &str_reverse; // Assign the address for the actual function (determined at runtime) +    (*f)(str_in); // Just calling the function through the pointer +    // f(str_in); // That's an alternative but equally valid syntax for calling it. +} + +/* +As long as function signatures match, you can assign any function to the same pointer. +Function pointers are usually typedef'd for simplicity and readability, as follows: +*/ + +typedef void (*my_fnp_type)(char *); + +// Gerçek bir işaretçi tanımlandığı zaman ki kullanımı: +// ... +// my_fnp_type f;  + +``` + +## Daha Fazla Okuma Listesi + +[K&R, aka "The C Programming Language"](https://en.wikipedia.org/wiki/The_C_Programming_Language)'in bir kopyasını bulundurmak mükemmel olabilir + +Diğer bir iyi kaynak ise [Learn C the hard way](http://c.learncodethehardway.org/book/) + +It's very important to use proper spacing, indentation and to be consistent with your coding style in general. +Readable code is better than clever code and fast code. For a good, sane coding style to adopt, see the +[Linux kernel coding stlye](https://www.kernel.org/doc/Documentation/CodingStyle). + +Diğer taraftan google sizin için bir arkadaş olabilir. + +[1] http://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct-equal-to-the-sum-of-sizeof-of-each-member
\ No newline at end of file diff --git a/tr-tr/php-tr.html.markdown b/tr-tr/php-tr.html.markdown new file mode 100644 index 00000000..94bc31ff --- /dev/null +++ b/tr-tr/php-tr.html.markdown @@ -0,0 +1,682 @@ +--- +language: php +filename: learnphp-tr.php +contributors: +    - ["Malcolm Fell", "http://emarref.net/"] +    - ["Trismegiste", "https://github.com/Trismegiste"] +translators: +    - ["Haydar KULEKCI", "http://scanf.info/"] +lang: tr-tr +--- + +PHP 5+ versiyonu için geçerlidir. + +```php +<?php // PHP kodları <?php etiketleri içerisinde bulunmalıdır. + +// Eğer php dosyanız sadece PHP kodu içeriyorsa, php'nin kapatma  +// etiketini kapatmayabilirsiniz.  + +// // işareti ile tek satırlık yorum satırı başlar. + +# # işareti de aynı görevi görür ancak // daha genel kullanımdadır. + + + +/* +    Çoklu satır kodu bu şekilde yazıyoruz. slash yıldız ile başlar  +    ve yıldız slash ile biter. +*/ + +// "echo" ya da "print" metodları çıktı almak için kullanılır. +print('Hello '); // Ekrana Yeni satır karakteri olmadan "Hello "  +                 // yazdırılır. + +// () parantezler "echo" ve "print" metodları için isteğe bağlıdır.  +echo "World\n"; // Ekrana yeni satır karakteri olmadan "World" +                // yazdırılır. +// (Bütün ifadeler noktalı virgül ile bitmelidir.) + +// <?php tagı dışarısındaki herşey otomatik olarak yazdırılacaktır. +?> +Hello World Again! +<?php + + +/************************************ +*   Tipler ve Değişkenler +*************************************/ + +// Değişkenler $ sembolü ile başlar. +// Geçerli bir değişken bir harf veya alt çizgi ile başlar, +// devamında da bir sayı, harf veya alt çizgi ile devam eder.  + +// Mantıksal değerler  +// Boolean values are harf büyüklüğüne duyarsızdır. +$boolean = true;  // veya TRUE veya True +$boolean = false; // veya FALSE veya False + +// Tam Sayılar +$int1 = 12;   // => 12 +$int2 = -12;  // => -12 +$int3 = 012;  // => 10 (öneki 0 olan sekizlik(octal) bir sayıyı gösterir) +$int4 = 0x0F; // => 15 (öneki 0x olanlar hex sayıları gösterir.) + +// Kayan Noktalı Sayılar +$float = 1.234; +$float = 1.2e3; +$float = 7E-10; + +// Aritmetik +$sum        = 1 + 1; // 2 +$difference = 2 - 1; // 1 +$product    = 2 * 2; // 4 +$quotient   = 2 / 1; // 2 + +// Aritmetik Kısayolları +$number = 0; +$number += 1;      // $number değişkeninin değerini 1 artırır. +echo $number++;    // 1 yazdırılır. (Yazdırıldıktan sonra artırılır.) +echo ++$number;    // 3 yazdırılır. (yazdırılmadan önce artırılır.) +$number /= $float; // Bölünür ve bölüm $number değerine eşitlenir. + +// Karakter dizileri(strings) tek tırnak ile kullanılmalıdır. +$sgl_quotes = '$String'; // => '$String' + +// Bir değişken içermediği sürece çift tırnak kullanmaktan kaçının +$dbl_quotes = "This is a $sgl_quotes."; // => 'This is a $String.' + +// Özel karakterler sadece çift tırnak ile kullanılabilir. +$escaped   = "This contains a \t tab character."; +$unescaped = 'This just contains a slash and a t: \t'; + +// Gerekirse bir değişkeni küme ayracı içine alın. +$money = "I have $${number} in the bank."; + +// Since PHP 5.3, nowdocs can be used for uninterpolated multi-liners +$nowdoc = <<<'END' +Multi line +string +END; + +// Heredocs will do string interpolation +$heredoc = <<<END +Multi line +$sgl_quotes +END; + +// . işareti ile karakter dizileri birbirine birleştirilebilir. +echo 'This string ' . 'is concatenated'; + + +/******************************** + * Sabitler + */ + +// Bir sabit define() metodu kullanılarak tanımlanır. +// ve çalışma zamanından hiçbir zaman değişmez! + +// geçerli bir sabit bir harf veya altçizgi ile başlar, +// ve bir sayı, harf ya da altçizgi ile devam eder. +define("FOO",     "something"); + +// sabite ulaşmak için direk olarak seçilen ismi kullanabilirsiniz.  +echo 'This outputs '.FOO; + + +/******************************** + * Diziler + */ + +// PHP'de bütün diziler ilişikilendirilebilirdir. (hashmaps), +// İlişkilendirilebilir(associative) diziler, hashmap olarak bilinir.  + +// PHP'nin bütün versiyonları için çalışır +$associative = array('One' => 1, 'Two' => 2, 'Three' => 3); + +// PHP 5.4 ile yeni bir söz dizimi kullanılmaya başlandı +$associative = ['One' => 1, 'Two' => 2, 'Three' => 3]; + +echo $associative['One']; // 1 yazdıracaktır. + +// Liste kullanımında index'ler tam sayıdır. +$array = ['One', 'Two', 'Three']; +echo $array[0]; // => "One" + + +/******************************** + * Çıktı + */ + +echo('Hello World!'); +// Hello World! çıktısı stdout'a yazdırılır. +// Eğer bir web browser ile çalışıyorsanır Stdout bir web sayfasıdır. + +print('Hello World!'); // echo ile aynıdır. + +// Aslında echo bir dil sabitidir, parantezleri kullanmayabilirsiniz.  +echo 'Hello World!'; +print 'Hello World!'; // Bu yazdırılacaktır.  + +$paragraph = 'paragraph'; + +echo 100;        // Echo ile doğrudan sayısal değer kullanımı +echo $paragraph; // veya değişken + +// PHP 5.4.0 veya daha üstü sürümlerde kısa açılış etiketi  +// konfigürasyonları yapıldı ise, kısa açılış etiketini kullanabilirsiniz. +?> +<p><?= $paragraph ?></p> +<?php + +$x = 1; +$y = 2; +$x = $y; // Şu anda $x değişkeni $y ile aynı değere sahiptir. +$z = &$y; +// $z, $y'nin referansını içermektedir.  +// $z'nin değerinin değişmesi $y'nin değerinide değiştireceltir veya +// tam tersi. Ancak $x özgün değeri olarak kalacaktır. + +echo $x; // => 2 +echo $z; // => 2 +$y = 0; +echo $x; // => 2 +echo $z; // => 0 + +/******************************** + * Mantık + */ +$a = 0; +$b = '0'; +$c = '1'; +$d = '1'; + +// Argüman doğru değilse bir hata fırlatılacaktır. + +// Bu karşılaştırmalar tipler aynı olmasa bile her zaman true olacaktır. +assert($a == $b); // equality +assert($c != $a); // inequality +assert($c <> $a); // alternative inequality +assert($a < $c); +assert($c > $b); +assert($a <= $b); +assert($c >= $d); + +// Aşağıdakiler yanlızca değer ve tip aynı olduğunda true olacaktır. +assert($c === $d); +assert($a !== $d); +assert(1 == '1'); +assert(1 !== '1'); + +// Değişkenler kullanıma bağlı olarak farklı tiplere çevrilebilir. + +$integer = 1; +echo $integer + $integer; // => 2 + +$string = '1'; +echo $string + $string; // => 2 (Karakter dizisi tam sayıya çevrilmeye zorlanır) + +$string = 'one'; +echo $string + $string; // => 0 +// Çıktı 0 olacaktır, çünkü + operatörü karakter dizisi olan 'one' değerini +// bir sayıya çeviremez. + +// Veri tipi çevirileri bir değişkeni farklı bir türde  +// düzenlemek için kullanılabilir. + +$boolean = (boolean) 1; // => true + +$zero = 0; +$boolean = (boolean) $zero; // => false + +// Veri tiplerini çevirmek için bazı fonksiyonlar vardır. +$integer = 5; +$string = strval($integer); + +$var = null; // Null değeri. + + +/******************************** + * Kontrol Yapıları + */ + +if (true) { +    print 'I get printed'; +} + +if (false) { +    print 'I don\'t'; +} else { +    print 'I get printed'; +} + +if (false) { +    print 'Does not get printed'; +} elseif(true) { +    print 'Does'; +} + +// Üçlü operatör +print (false ? 'Does not get printed' : 'Does'); + +$x = 0; +if ($x === '0') { +    print 'Does not print'; +} elseif($x == '1') { +    print 'Does not print'; +} else { +    print 'Does print'; +} + + + +// Bu alternatif sözdizimi template'ler için kullanışlıdır. +?> + +<?php if ($x): ?> +This is displayed if the test is truthy. +<?php else: ?> +This is displayed otherwise. +<?php endif; ?> + +<?php + +// Use switch to save some logic. +switch ($x) { +    case '0': +        print 'Switch does type coercion'; +        break; // Bir breake yazmalısınız ya da 'two' ve 'three' +               // durumunuda kapsarsınız. +    case 'two': +    case 'three': +        // $variable değişkeni 'two' ya da 'three' ise  +        break; +    default: +        // Varsayılan olarak bir şey yap +} + +// While, do...while ve for döngüleri tanıdıktır. +$i = 0; +while ($i < 5) { +    echo $i++; +}; // "01234" yazdırılacaktır + +echo "\n"; + +$i = 0; +do { +    echo $i++; +} while ($i < 5); // "01234" yazdırılacaktır. + +echo "\n"; + +for ($x = 0; $x < 10; $x++) { +    echo $x; +} // "0123456789" yazdırılacaktır. + +echo "\n"; + +$wheels = ['bicycle' => 2, 'car' => 4]; + +// Foreach döngüsü diziler üzerinde çalışır +foreach ($wheels as $wheel_count) { +    echo $wheel_count; +} // "24" yazdırılacaktır. + +echo "\n"; + +// Key-Value değerlere ulaşabilirsiniz. +foreach ($wheels as $vehicle => $wheel_count) { +    echo "A $vehicle has $wheel_count wheels"; +} + +echo "\n"; + +$i = 0; +while ($i < 5) { +    if ($i === 3) { +        break; // while döngüsünden çıkar +    } +    echo $i++; +} // Prints "012" + +for ($i = 0; $i < 5; $i++) { +    if ($i === 3) { +        continue; // Aktif döngüyü atlar  +    } +    echo $i; +} // "0124" yazdırılacaktır. + + + +/******************************** + * Fonksiyonlar + */ + +// Bir fonksiyon tanımlamak için "function" kullanılır: +function my_function () { +  return 'Hello'; +} + +echo my_function(); // => "Hello" + +// Geçerli bir fonksiyon ismi bir harf veya altçizgi ile başlar ve +// bir sayı, harf ya da alt çizgi ile devam eder. + +function add ($x, $y = 1) { // $y değeri isteğe bağlıdır ve  +                            // varsayılan değeri 1'dir +  $result = $x + $y; +  return $result; +} + +echo add(4); // => 5 +echo add(4, 2); // => 6 + +// $result fonksiyon dışında ulaşılabilir değildir.  +// print $result; // Bir uyarı verecektir. + +// PHP 5.3'den beri bir anonymous fonksiyon tanımlayabilirsiniz; +$inc = function ($x) { +  return $x + 1; +}; + +echo $inc(2); // => 3 + +function foo ($x, $y, $z) { +  echo "$x - $y - $z"; +} + +// Fonksiyonlar bir fonksiyon dönebilir. +function bar ($x, $y) { +  // Fonksiyona dışardan değişken gönderebilmek için 'use' komutunu kullanın. +  return function ($z) use ($x, $y) { +    foo($x, $y, $z); +  }; +} + +$bar = bar('A', 'B'); +$bar('C'); // "A - B - C" yazdırılacaktır. + +// Fonksiyonun ismini karakter dizinden çağırabilirsiniz.  +$function_name = 'add'; +echo $function_name(1, 2); // => 3 +// Programatik olarak fonksiyonları çalıştırmak için yararlı olabilir +// veya, call_user_func(callable $callback [, $parameter [, ... ]]); kulanın. + + +/******************************** + * Includes + */ + +<?php +// PHP'de include edilecek dosyalar PHP açma etiketi ile başlamalı. (!) + +include 'my-file.php'; +// my-file.php dosyasındaki kodlar artık mevcut scope'da kullanılabilir. +// Eğer dosya include edilemezse bir uyarı (örneğin: file not found)  +// fırlatılacaktır. + +include_once 'my-file.php'; +// Eğer bir dosya include edildi ise tekrar include edilmeyecektir. +// Bu çoklu class tanımlama hatalarını önler. + +require 'my-file.php'; +require_once 'my-file.php'; +// Dosya include edilemediğinde fatal error veren require() bu konu  +// dışında include() ile aynıdır. + +// my-include.php dosyasının içeriği: +<?php + +return 'Anything you like.'; +// Dosya sonu + +// Include'lar ver require'lar aynı zamanda bir return dönebilir. +$value = include 'my-include.php'; + +// Dosyalar verilen dosya yoluna göre include edilir veya, hiçbirşey  +// verilmezse include_path konfigürasyonuna göre include edecektir.  +// Eğer dosya include_path'da da bulunamazsa include hata vermeden  +// önce içinde bulunulan dizini kontrol ecektir. +/* */ + + +/******************************** + * Sınıflar + */ + +// Sınıflar class kelimesi ile tanımlanır + +class MyClass +{ +    const MY_CONST      = 'value'; // Bir sabit + +    static $staticVar   = 'static'; + +    // Static değişkenler ve onların görünürlüğü +    public static $publicStaticVar = 'publicStatic'; +    private static $privateStaticVar = 'privateStatic';  +        // Sadece bu sınıf içerisinde erişilebilir +    protected static $protectedStaticVar = 'protectedStatic';  +        // Bu sınıf ve alt sınıflarından erişilebilir + +    // Özellikler görünürlüğü ile birlikte tanımlanmalıdır. +    public $property    = 'public'; +    public $instanceProp; +    protected $prot = 'protected'; // Sınıf ve alt sınıflardan erişilebilir +    private $priv   = 'private';   // Sadece bu sınıftan erişilebilir + +    // __construct ile bir constructor oluşturulabilir. +    public function __construct($instanceProp) { +        // $this ile instance değişkenine erişilir. +        $this->instanceProp = $instanceProp; +    } + +    // Sınıfın içerisinde metodlar fonksiyonlar gibi tanımlanır. +    public function myMethod() +    { +        print 'MyClass'; +    } + +    final function youCannotOverrideMe() +    { +    } + +    public static function myStaticMethod() +    { +        print 'I am static'; +    } +} + +echo MyClass::MY_CONST;    // 'value' şeklinde çıktı verir; +echo MyClass::$staticVar;  // 'static' şeklinde çıktı verir; +MyClass::myStaticMethod(); // 'I am static' şeklinde çıktı verir; + +// Sınıfların new ile kullanımı +$my_class = new MyClass('An instance property'); +// Eğer argüman göndermeyeceksek parantezler isteğe bağlıdır. + +// Sınıfın üyelerine erişim -> +echo $my_class->property;     // => "public" +echo $my_class->instanceProp; // => "An instance property" +$my_class->myMethod();        // => "MyClass" + + +// "extends" ile sınıfı extend etmek +class MyOtherClass extends MyClass +{ +    function printProtectedProperty() +    { +        echo $this->prot; +    } + +    // Bir methodu ezmek +    function myMethod() +    { +        parent::myMethod(); +        print ' > MyOtherClass'; +    } +} + +$my_other_class = new MyOtherClass('Instance prop'); +$my_other_class->printProtectedProperty(); // "protected" şeklinde çıktı verir. +$my_other_class->myMethod();    // "MyClass > MyOtherClass" şeklinde çıktı verir + +final class YouCannotExtendMe +{ +} + +// getter ve setter'ları oluşturmak için "magic method"ları kullanabilirsiniz. +class MyMapClass +{ +    private $property; + +    public function __get($key) +    { +        return $this->$key; +    } + +    public function __set($key, $value) +    { +        $this->$key = $value; +    } +} + +$x = new MyMapClass(); +echo $x->property; // __get() metodunu kullanacaktır. +$x->property = 'Something'; // __set() metodunu kullanacaktır.  + +// Sınıflar abstract olabilir(abstract kelimesini kullanarak) veya +// interface'ler uygulanabilir (implements kelimesi kullanılarak). +// Bir interface "interface" kelimesi kullanılarak oluşturulur. + +interface InterfaceOne +{ +    public function doSomething(); +} + +interface InterfaceTwo +{ +    public function doSomethingElse(); +} + +// interfaces can be extended +interface InterfaceThree extends InterfaceTwo +{ +    public function doAnotherContract(); +} + +abstract class MyAbstractClass implements InterfaceOne +{ +    public $x = 'doSomething'; +} + +class MyConcreteClass extends MyAbstractClass implements InterfaceTwo +{ +    public function doSomething() +    { +        echo $x; +    } + +    public function doSomethingElse() +    { +        echo 'doSomethingElse'; +    } +} + + +// Sınıflar birden fazla interface kullanabilir. +class SomeOtherClass implements InterfaceOne, InterfaceTwo +{ +    public function doSomething() +    { +        echo 'doSomething'; +    } + +    public function doSomethingElse() +    { +        echo 'doSomethingElse'; +    } +} + + + +/******************************** + * Traits + */ +// Trait'ler PHP 5.4.0'dan beri kullanılabilir ve "trait" kullanılarak  +// tanımlanır. + +trait MyTrait +{ +    public function myTraitMethod() +    { +        print 'I have MyTrait'; +    } +} + +class MyTraitfulClass +{ +    use MyTrait; +} + +$cls = new MyTraitfulClass(); +$cls->myTraitMethod(); // "I have MyTrait" çıktısını verir. + + + +/******************************** + * İsim Uzayları + */ + +// Bu alan ayrılmıştır, çünkü isim uzayı tanımı bir dosyada en başta  +// yapılmalıdır. Bu örnekte böyle olmadığını varsayalım. + +<?php + +// Varsayılan olarak, sınıflar global isim uzayındadır, ve açıkça bir  +// ters slash ile çağrılabilir. + +$cls = new \MyClass(); + + + +// Bir dosya için isim uzayı atama +namespace My\Namespace; + +class MyClass +{ +} + +// (diğer bir dosya) +$cls = new My\Namespace\MyClass; + +//veya diğer bir isim uzayında. +namespace My\Other\Namespace; + +use My\Namespace\MyClass; + +$cls = new MyClass(); + +// veya isim uzayına bir takma isim koyabilirsiniz. + +namespace My\Other\Namespace; + +use My\Namespace as SomeOtherNamespace; + +$cls = new SomeOtherNamespace\MyClass(); + +*/ + +``` + +## Daha fazla bilgi + +Referans ve topluluk yazıları için [official PHP documentation](http://www.php.net/manual/) adresini ziyaret edin. + +Gncel en yi örnekler için [PHP Usulüne Uygun](http://kulekci.net/php-the-right-way/) adresini ziyaret edin. + +Eğer bir paket yöneticisi olan dil kullandıysanız, [Composer](http://getcomposer.org/)'a bir göz atın. + +Genel standartlar için PHP Framework Interoperability Group'unun [PSR standards](https://github.com/php-fig/fig-standards) ziyaret edebilirsiniz.  + | 
