2013-08-20 10:59:49 +04:00
|
|
|
|
---
|
2014-10-13 01:24:42 +04:00
|
|
|
|
language: PHP
|
2013-08-20 10:59:49 +04:00
|
|
|
|
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;
|
|
|
|
|
|
2013-09-04 00:21:03 +04:00
|
|
|
|
// Değişken Silmek
|
|
|
|
|
unset($int1)
|
|
|
|
|
|
2013-08-20 10:59:49 +04:00
|
|
|
|
// 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"
|
|
|
|
|
|
2013-09-18 16:51:20 +04:00
|
|
|
|
// Dizinin sonuna bir eleman ekleme
|
|
|
|
|
$array[] = 'Four';
|
|
|
|
|
|
|
|
|
|
// Diziden eleman silme
|
|
|
|
|
unset($array[3]);
|
2013-08-20 10:59:49 +04:00
|
|
|
|
|
|
|
|
|
/********************************
|
|
|
|
|
* Çı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
|
|
|
|
|
|
2013-09-04 00:21:03 +04:00
|
|
|
|
// Dump'lar değişkenin tipi ve değerini yazdırır
|
|
|
|
|
var_dump($z); // int(0) yazdırılacaktır
|
|
|
|
|
|
|
|
|
|
// Print'ler ise değişkeni okunabilir bir formatta yazdıracaktır.
|
|
|
|
|
print_r($array); // Çıktı: Array ( [0] => One [1] => Two [2] => Three )
|
|
|
|
|
|
|
|
|
|
|
2013-08-20 10:59:49 +04:00
|
|
|
|
/********************************
|
|
|
|
|
* 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';
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-04 00:21:03 +04:00
|
|
|
|
//final anahtar kelimesi bu metodu override edilemez yapacaktır.
|
2013-08-20 10:59:49 +04:00
|
|
|
|
final function youCannotOverrideMe()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-04 00:21:03 +04:00
|
|
|
|
/*
|
|
|
|
|
Bir sınıfın özelliğini ya da metodunu statik yaptığınız takdirde sınıfın bir
|
|
|
|
|
objesini oluşturmadan bu elemana erişebilirsiniz. Bir özellik statik tanımlanmış
|
|
|
|
|
ise obje üzerinden bu elemana erişilemez. (Statik metodlar öyle değildir.)
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
2013-08-20 10:59:49 +04:00
|
|
|
|
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.
|
|
|
|
|
|
2013-09-18 16:51:20 +04:00
|
|
|
|
Güncel en yi örnekler için [PHP Usulüne Uygun](http://kulekci.net/php-the-right-way/) adresini ziyaret edin.
|
2013-08-20 10:59:49 +04:00
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|