• Bu site çerezler kullanır. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz. Daha fazla bilgi edin.

PHP'ye giriş

Konuyu Okuyan Kişiler (0)

PandaMaster

webmaster.tc
Katılım
7 Ağu 2012
Mesajlar
10
Beğeniler
0
#1
Foruma yeni üye oldum, kendimce bildiklerimi paylaşayım dedim, temel konulardan başlayıp vakit buldukça ilerlemeyi düşünüyorum. Hatalı kısımlarıda diğer arkadaşlar düzeltir bu sayede ben de bildiklerimi geliştiririm dedim.

Dediğim gibi değişkenlerden başlayıp oop,tasarım desenleri gibi konulara kadar gitmeyi planlıyorum.
Bu yazımda değişkenler,değişken tipleri, tip dönüşümü konusuna hızlı bir giriş yapıp ardından string tipini inceleyip(değişken parse etmek, heredoc, nowdoc falan) bugünü bitirmeyi düşünüyorum.

Değişkenler: Değişkenlerin ne olduğuna aşina değilseniz şöyle özetleyebiliriz: Herhangi bir değeri tutmamıza(daha doğrusu ona istediğimiz an ulaşmamıza) yarayan isimlerdir dersek sanırım çok da yanlış olmaz. Değişkenlerde bir değeri tutarız ve daha sonra o değer lazım olduğu zaman ona erişiriz. Php de değişkeni tanımlamak için $ sembolünü kullanırız.
Kod:
$degisken = "Panda";
bundan sonra uygulamada bu değişkenin geçerli olduğu alanda(ilerde göreceğiz: "variable scope") ne zaman $degisken i kullanırsak dersek "Panda" değerine ulaşmış oluruz. Adının değişken olmasından ötürü istediğimiz zaman değerini değiştirebildiğimiz anlaşılmıştır :)

Değişken Tipleri: PHP de değişken tipini değişkeni tanımlarken belirtmemiz gerekmez fakat ilerleyen zamanlarda birçok yerde çalıştığımız değişkenin tipini bilmemiz gerekir.

4 Tane temel değişken tipimiz(manualde buna scalar demiş)
-integer(Tam sayıları)
-float(Ondalıklı sayıları)
-string(Karakterleri)
-boolean(TRUE yada FALSE)

2 tane bileşik tipler(bir yada daha fazla değişkenden meydana geldiği için)
-array
-object
vardır.

(Bunların dışında resource,null gibi özel tipler ve de mixed gibi sözde tipler vardır ama onlara bu konuda girmeceyeğiz).
İlk kez bunları gören birine biraz karışık gelebilir ama bu kısım sadece özet kısmı o nedenle fazla birşey anlatmadığı için karışık.

Dönüşümler: Daha öncede dediğim gibi PHP'de değişkeni $ işareti ile tanımladıktan sonra türünü belirmemize gerek yoktur, aldığı değere göre otomatik olarak belirler. Yani:
Kod:
$degisken = "Panda"; //şu an bir string
$değişken = 123; // şu an otomatik olarak integer oldu
PHP operatörlerde otomatik olarak tür değişimi uygular yani 1(integer) ile 3pandayı(string) toplarsak otomatik olarak 3pandayı integere dönüştürecek(3 olacak değeri) sonra toplayacaktır ve sonuç olarak bize 4 verecektir. Bunun detaylarına ilerde değineceğiz.

İstersek çeşitli yöntemle tip dönüşümü yaparız
Kod:
$degisken = "3panda";
echo (int)$degisken; //çıktı 3 olacaktır
Tip dönüşümleri ile ilgili herşeyi, tüm tipleri inceledikten sonra detaylı olarak yazacağım. Sadece fikir olsun diye yazdır bu kısmı.

String: Daha öncede yazdığım gibi string değişken tipi, karakter setleri(yazılar vs.) tutar diyebiliriz. örneğin "Panda" bir karakterler bütünü dersek bunu string tipinde olduğunu söyleyebiliriz. String tipinde bir değişkeni tanımlamak için kullandığımız 4 farklı yöntem vardır.

1-Tek Tırnak('): Bu yöntem ile iki tane tek tırnak arasına değişkenimizin değerini yazarız. Örneğin:
Kod:
$degisken = 'Panda';
şeklinde tanımlarız.
Kod:
$degisken2 = 'PandaMaster bir cümle oluşturdu, Başka bir örnek';
Bu şekilde tanımlanan stringlerin özelliği, değişkenler parse edilmez yani
Kod:
$baskaDegisken = 6;
$degisken = '$baskaDegisken in değerini okuyamadı';
echo $degisken;
yaparsak ekrana $baskaDegisken in değerini(yani 6) değil direk $baskaDegisken olarak yazacaktır. Alt kısımda parsing konusuna detaylı gireceğim.

Bu yöntemin ikinci bir olayı ise sadece ' ve \ i escape etmemiz yeterlidir.

parse: string içinde değişken adını yazdığımız zaman değişken adının yerine değerini koyması diyebiliriz. Yani $baskaDeğişken yazan yerlere onun yerine değeri olan 6 yazdırmak diyebiliriz. Tek tırnakta parse edemez.

escape: PHP manualde Türkçe olarak öncelemek gibi birşey demiş ama ben escape kelimesini kullanıyorum. Bazen bazı karakterleri asıl görevlerinden uzaklaştırmak gerekir mesela tek tırnak işareti bir stringi başlatıp bitirdiğimiz yerlerde kullanıyoruz, peki o yazı içinde tek tırnak gerekirse yani:
Kod:
$degisken = 'Bu yazı tırnakla başladı tırnakla bitecek ama bana Panda'da olduğu gibi yazı içinde tırnak lazım oldu';
Yukarıdaki kod hata verir çünkü PHP hangi tırnağın yazıya ait, hangi tırnağın stringin bittiği noktayı belirttiğini bilemeyeceği için "Panda" yazısının yanındaki tırnağı string açma-kapatma tırnağı zanneder ve stringi orada bitirir. Bu yüzden işlevinden uzaklaştırmak gerekir. bunun için arkasına bir \ işareti koyarız. Bu sayede artık işlevini kaybeder ve PHP onun stringin bitiş noktası değilde yazının bir parçası olduğunu anlar. Bu işleme escape denir. Şimdi yukarda sadece ' ve \ i escape etmemiz gerekir demişiz. Çünkü tek tırnak ile oluşturulan bir stringde sadece ' ve \ işaretinin özel bir işlevi-anlamı vardır.

2-Nowdoc: Eğer string içinde bize çok sayıda ' gerekli ise her seferinde escape etmek yerine stringi ' ile değil de kendimize özgü bir başlangıç ve bitiş belirteciyle tanımlama isteyebiliriz. Bu sayede PHP tırnakla karşılaşınca bir önem vermez, çünkü artık stringimizin başladığı ve bittiği noktayı tırnak ile değil kendimize özgü bir belitreçle belirledik. Bu yapmak için nowdoc bize yetişir, <<< ardından kendimize özgü tırnak yerine kullanılacak belirteç koyarız(iki tane tek tırnak içinde), alt satıra geçer stringimizi yazar bittiği yerden alt satıra geçer ve özgü belirtecimizle kapatırız.

Kod:
$degisken = <<<'Panda'
test string '' bakın ' ları escape etmemize gerek kalmadı
Panda;
3-Çift Tırnak("): Çift tırnak ile string tanımladığımız zaman değişkenler parse edilir. Ve bazı özel karakterlere(\n,\r gibi) duyarlıdır ve onlarında escape edilmesi gerekebilir.

parse: string içinde değişken adını yazdığımız zaman değişken adının yerine değerini koyması diyebiliriz.

Kod:
$string = "Bu bir string";
echo $string;
ekrana "Bu bir string" yazdırır. Peki ya değişkeni yazdırmak istersek mesela, userName diye bir değişkenimiz var, değer olarak kullanıcı adını tutuyor ve biz o kullanıcı adını ekrana yazdırma istiyoruz, Bunun içinde yazdırılacak stringin userName değişkenini parse etmesi gerekiyor. 2 farklı yol izleyebiliriz.
1. Yol:
Kod:
$userName= "PandaMaster";
echo "En son üye : $userName";
bu yola basit yol denir, daha kompleks gösterim gerekebilir mesela bir fonksiyondan dönen değeri değişken ismi olarak kullanmak istedik, yada PandaMasterın yanına 3-5 karakter daha yazmak istedik bu gibi durumlar bu şekilde parse etmek yeterli olmayabilir onun yerine curly syntax dediğimiz bir yol daha vardır

2. Yol:
Bu yolde {$degisken} yada ${degisken} şeklinde parse ederiz.
Kod:
$degisken = "PandaMaster";
//ekrana PandaMaster2000 yazdıracağız
echo "parse edelim $degisken2000";
yaparsak PHP $degisken2000 isimli değişkeni arayacaktır ama bulamayacaktır
Kod:
echo "parse edelim {$degisken}2000";
yazarsak bu sorunu ortadan kaldırırız çünkü değişkenin nerede başlayıp nerede bittiğini gösterdik. Bunun dışında işimize yarayan bir kaç özelliği daha vardır ilerde dizilerde ve fonksiyonlarda değineceğim.


4-Heredoc: Heredoc ise nowdoc un " tırnaklı versiyonudur, yani yazımızda çok fazla " var ve değişken parsing gerektiren bir string tanımlamamız gerekiyorsa kullanırız. nowdoc gibi
Kod:
<<<"Panda"
string
Panda;
şeklinde olur ama bunda " opsiyoneldir, koymasanızda olur.


Son olarakta stringlere bazı durumlarda dizi muamelesi yapabiliriz, yani
Kod:
$string = "PandaMaster";
echo $string[2];
Yukarıdaki kod bize 3. harfi getirecektir. Dizi muamelesi yapıyoruz diye foreach da falan kullanırız sanmayın :)


Şimdilik bu kadar, birdahaki yazımda diğer değişken türlerine hızlı bir giriş yapacğım, sonrakinde ise tip dönüşümleri üzerinde uzun uzadıya duracağım.
Bunları blog açıp orda yazmayı düşünüyordum ama burada yazayıp daha iyi bir bilgi alış-verişi olur, hatalı bildiğim kısımlarımı da düzeltenler olur bu sayede bana da faydası olur diye düşündüm. Umarım beğenirsiniz.
 

ByTRiSLaSiS

webmaster.tc
Katılım
6 Ağu 2012
Mesajlar
133
Beğeniler
0
Konum
İstanbul
#2
baştan sona okudum
devamını getirip bitirmeni temenni ediyorum
çünkü yazacaklarım var
bitiminde haber bekliyorum üstad :)
ellerin dert görmesin :)
 

flashomer

webmaster.tc
Katılım
6 Ağu 2012
Mesajlar
55
Beğeniler
0
Konum
Flash/Adobe
#3
Hocam elinize sağlık,
if,for ve while döngüleri hakkında da kısa bahsederseniz
Ardında kısaca sql bağlantısı hakkında php başlangıcı için mükemmel olur ben bu şekilde php öğrenmeye başlamıştım.
 

PandaMaster

webmaster.tc
Katılım
7 Ağu 2012
Mesajlar
10
Beğeniler
0
#5
Teşekkürler, dediğim gibi bayağıdır aklımdaydı bu şekilde bir yazı dizisi yazmak, çünkü Türkçe çok fazla kaynak yok olanlarda genel olarak birbirine benzer olduğu için bir blog açıp yazmayı düşünüyordum, bu siteyi keşfedince burda yazmak daha mantıklı geldi. Dediğim gibi elimden geldikçe yazmayı düşünüyorum, temel seviyelerden başlayıp bildiğim kadarıyla ileri seviyeye götürmeyi planlıyorum.
 

PandaMaster

webmaster.tc
Katılım
7 Ağu 2012
Mesajlar
10
Beğeniler
0
#7
Doğrudur fakat gelecek yazılarda bu yazılardan referanslar kullanmayı düşündüğüm için direk onlardan başlamak istemedim.
 

YuqseLx

webmaster.tc
Katılım
7 Ağu 2012
Mesajlar
12
Beğeniler
0
#8
Çok güzel anlatmışsınız. Dediğiniz gibi Türkçe kaynak sıkıntılı. Çok ama işte herkes c/p yaptığı için bir anlamı olmuyor. Teşekkürler
 

PandaMaster

webmaster.tc
Katılım
7 Ağu 2012
Mesajlar
10
Beğeniler
0
#10
Yazıya devam edip bu kısmı bitirelim, bugün kalan temel(scalar) değişkenleri yazıp, tür dönüşümleri ve onları bilmenin gerekliliğini anlatıp değişken konusunu bitirelim, daha fazla detay isteyenler manualden inceleyebilir.

Integer: Tam sayılar kümesi demiştik. 1,2,3,-1,-2 gibi değerler alır. Değerini decimal(onluk), octal, hexadecimal ve binary olarak alabilir. Değer aralığını aşan bir değer vermeye kalkarsanız otomatik floata dönüşür.
Kod:
$var = 1; // integer bir değişken tanımladır
Float: Ondalıklı değerler için kullanırız.
Kod:
$var = 1.4; //float
Boolean: TRUE yada FALSE değeri alan değişken tipimizdir. Dönüşümlere bakarken en çok bunun üzerinde duracağız.

Kod:
$var = TRUE;
Hızlı bir baktık, bunları zaten bildiğinizi varsayıp asıl değinmek istediğim konuya geçeyim.

Tip Dönüşümleri: PHP de her ne kadar değişkeni tanımlarken tipini belirlemesekte bir tipi vardır. Elma ile armut kıyaslanmayacağı, işleme konamayacağı için, PHP bu dönüşümleri gerektiği durumlarda kendisi yapar. Ama bazı durumlarda müdahele etmemiz gerekir çünkü PHP operatöre, kontrol yapısına, aldığı değere vs. göre değişken türlerini dönüştürebilir.

Daha açıklayıcı olursak
Kod:
echo 10 + "5 kişi";
10 sayısı ile 5 kişiyi toplarken otomatik olarak 5 kişi stringini integere çevirir. Daha gerçekçi ver karşılaştığımız bir örneğe bakalım:

Bir string içinde başka bir string varmı bakalım ama bunun için stripos fonksiyonu kullanalım. Bu fonksiyonu bilmeyenler için özetlersek, verilen bir stringde, verilen başka bir alt stringin pozisyonunu, büyük küçük harf duyarsız arar. bulursa pozisyonu, bulamazsa false geri döndürür.

Şimdi "PandaMaster" stringi içinde "pa" kısmı varmı bakalım, stripos işe "pa" varmı yokmu bakabiliriz, çünkü varsa başladığı yeri yoksa false çevirecektir. bu durumda şu kod işe yarar gibi gözüküyor:

Kod:
$string = "PandaMaster";
if(stripos($string,"pa") != false)
{
	echo "stringin içinde \"pa\" parçası var";
}
Yukarıdaki kod "pa" ya bakacaktır ve pozisyonunu çevirecektir. Sıkıntı burada başlıyor. "pa" nın pozisyonu 0 yani bu durumda bize 0 çevirecektir(0. noktada buldum anlamında) ama != false ifadesi sol taraftaki sıfırı kıyaslarken otomatik boolean tipine dönüştürecek ve bununda değeri 0 olduğu için false olacaktır. Yani aradığımızı bulmamıza ramen bulmamış gibi davranacaktır. Sanırım tip dönüşümü olayını anlamaya yeterli bir örnek.

Burada yardımıza === yetişir. == kıyas operatörü tipleri dönüştürebildiği için dönüştürmesin dediğimiz yerde === kullanırız. === operatörü kesinlikle tip dönüşümü yapmaz çünkü tipleride aynı mı diye bakar. Yukarıdaki örnekte != yerine !== kullansaydık eğer istediğimiz gibi çalışacaktı.(daha detaylara operatörlerde gireceğiz)

Bazen tiplere müdahele etmemiz gerekebilir(type casting) bu durumlarda settype fonksiyonu yada benim kullandığım yöntem olan, değiken dönüşümü sağlayacak değişken tipinin ismini parantez içinde değişkenin önüne yazmayı kullanabiliriz. (integer) $değişken, (bool) $değişken gibi değişkenin önüne zorlayacağımız tipi yazarız. Mesela "10 Panda" stringinin integere dönüşümü lazımsa

Kod:
(integer) "10 panda";
yaparız.

Hangi tipin hangi tipe dönüştüğü durumda aldığı değerler gibi konulara burada girrmeyeceğim gereksiz uzun olur zaten manualde onlara ve yukardaki örneğin benzerlerine ulaşabilirsiniz. Burada sadece başlangıç amaçlı giriş yaptım. Bir dahaki yazıda sabitleri özetleyip operatörlere başlayacağım.
 

gkbrk

webmaster.tc
Katılım
9 Ağu 2012
Mesajlar
1,044
Beğeniler
0
#11
Çok güzel anlatmışsınız. Dediğiniz gibi Türkçe kaynak sıkıntılı. Çok ama işte herkes c/p yaptığı için bir anlamı olmuyor. Teşekkürler
Aslında Türkçe kaynak o kadar da az değil. Piyasada birçok Türkçe PHP kitabı var.
Ama benim tercihim ve ilk kitabım Rıza Çelik'in A'dan Z'ye PHP kitabı.(Bunu reklam amaçlı yazmadım. Kullandığım kitap bu).
Ayrıca isteyen herkes PHP.net'teki Türkçe Manuel'i okuyabilir. İnternette bulabileceğiniz videolu anlatımları saymıyorum bile.
Kısacası Türkçe kaynak İngilizce kadar olmasa bile yeterli düzeyde var.
 

PandaMaster

webmaster.tc
Katılım
7 Ağu 2012
Mesajlar
10
Beğeniler
0
#12
2-3 gündür yazamadım, İş yoğunluğu nedeniyle anca vakit bulabildim, kusura bakmazsınız umarım.

En son tip dönüşümlerinde kalmışız, bu yazıda değişkenin etki alanı(variable scope), sabitler ve sihirli sabitlerle girişimizi tamamlamayı düşünüyorum.

Sabitler: Değişkenleri öğrenmiştik, sabitler ise adından da anlaşılacağı gibi değeri kodumuz çalışırken değişmeyen değerleri tutmamıza yarar. Bir sabit tanımlandıktan sonra yok edilemez(unset) ya da değeri kod işlenirken değiştirilemez.

Bu bize ne zaman gerekir? Aslında çoğu zaman gerekir, mesela uygulamanın her yerinde kullanılacak bir değer lazım bize, bunu bir sabit olarak tanımlarız. Çünkü sabitlerin etki alanı tüm uygulamadır(aşağıda detaylı inceledik).

İsimlendirme kuralları değişkenlerle aynıdır (_ ya da harfle başlar _, harf ya da sayı ile devam eder, değişkenleri tanımlarkenki gibi 127 ile 255 arasındaki ascii karakterlerde harflerden sayılır). Bunların dışında bir kısıtlama olmadığı gibi hepsini büyük harfle yazmak genel bir programlama geleneği olduğu için, kodu okuyan tarafından faydalı olacaktır.

Define(sabit adı, değeri); şeklinde yada php 5.3 den sonrasında const keywordu ile de tanımlanır ama bunu ben pek kullanmadım. Sadece skalar değişken tipi olabilir(yukarda bahsetmiştim bu tiplerden). Büyük küçük harf duyarlıdır. Yani PANDA ile panda farklı sabitlerdir.

Kod:
define('PANDA', 123);

echo PANDA; //çıktılar
echo panda; //çıktılamaz çünkü büyük küçük harf duyarlı( aslında 'panda' olarak çıktılar, PHP sabiti bulamazsa, string yazdığınızı düşünecek ve yazılana string muamelesi yapacaktır.
Sabitin adını yazmak ya da constant() fonksiyonunu kullanmak bize o sabitin değerini verir. defined() fonksiyonu tanımlı olup olmadığını verir. get_defined_constants fonksiyonu ise uygulamadaki tüm sabitlerin listesini getirir bize.

Sihirli sabitler: Yukarıda sabitlerin değerinin kodun çalıştığı sırada değişmeyeceğini söylemiştik. Fakat PHP ile gelen 8 tane sihirli sabit vardır(yanlış anlaşılmasın, PHP ile çok sabit gelir ama bunların 8 tanesi sihirlidir), bunların değeri uygulamada kullanıldıkları yere göre değişir. Sihirli sabitler __Sabit adı__ şeklinde tanımlanmıştır. Bu nedenle kendi sabitlerinizi tanımlarken bu şekilde isimlendirmekten kaçınmanız faydalıdır(ilerde bu isimle bi PHP sabiti gelip gelemeyeceğini bilemezsiniz ya da kodu okuyan biri bunu sihirli sabit sanabilir).
Örneğin __LINE__ sabiti hangi satıra yazılırsa o satırın numarasını değer olarak alır.

Kod:
echo __LINE__ ;//1 çıktılar

echo __LINE__ ;// 3 çıktılar
Sihirli sabitleri defined fonksiyonu ile tanımlı olup olmadığına bakamayız(emin olmamakla birlikte sanıyorum ki sihirli sabitler kaynak kodda normal sabitler gibi değilde farklı bir şekilde oluşturulmuş olabilir gibi geliyor bana ya da tamamen sallıyorum :) )

8 sihirli sabit:
Kod:
__LINE__ : yazıldığı yerdeki satır numarasını verir.
__FILE__: Dosya yolu ve dosyanın adını içerir. include ile dahil edilen bir dosyada o dosyanın adı ve yolunu içerir.
__DIR__: Dosya yolunu verir. include edilen dosyada o dosyanın yolunu verir.
__FUNCTION__:  Yazıldığı fonksiyonun adını verir.
__CLASS__:  Class adını verir.Namespace var ise onuda verir.
__TRAIT__: Trait adını verir.
__METHOD__: Metod adını verir
__NAMESPACE__: Namespace adını verir

Etki alanı: Bir değişkeni kullanabileceğimiz yerler tanımladığımız yere göre değişir. Örneğin kodun herhangi bir yerinde tanımlanan bir değişken o noktadan sonra geçerlidir. Eğer bu sayfayı başka bir sayfaya include edersek orda da geçerli olmaya devam eder.

Kod:
$a = 5; // bu satırdan sonra bu değişkeni kullanabilir, yada bu dosyayı include etsek, diğer dosyada da kullanabiliriz.
Bir fonksiyonun içi lokal bir bölgedir yani dışarıyla ilgisi yoktur. Bu nedenle orada tanımlanan bir değişken dışarıda kullanılamaz yada dışarıda tanımlanan bir değişken orada kullanılamaz.

Kod:
$globalDegisken = "Master";

function yazdir()
{

     $lokalDegisken = "Panda";
     echo $globalDegisken;
}

yazdir();


echo $lokalDegisken;
Yukarıdaki kod değişkenleri bulamadığını belirten bir notice verecektir. Görüldüğü üzere fonksiyonların içi kendi alanlarıdır.

Bu alanları aşmak için global keywordunu ya da referanslı atama kullanabiliriz. Global keywordu global bölgede(herhangi bir yere ait olmayan) tanımlanmış bir değişkeni lokal bölgeye bildirir. örneğin:

Kod:
$globalDegisken = "Master";

function yazdir()
{
     global $globalDegisken;

     echo $globalDegisken;
}

yazdir();
fonksiyon içinde global yazar ardından değişkenin adını yazarsak o değişkeni kullanabiliriz. Referanslı atama yöntemini ve lokal değişkenin değerini dışarda kullanma konusunu fonskiyonlar konusunda fonksiyona parametre geçme konusunda yazacağım.

Süper globaller diye adlandırılan değişkenler ise PHP ile gelen, uygulamanın her yerinde ve her etki alanında kullanılabilen(lokal bölge dahil) değişkenlerdir. $_POST, $_GET bunlara birer örnektir. Fonksiyon içi gibi lokal alanlarda kullanabilirsiniz.

Kod:
function yazdir()
{
     echo $_POST['Panda'];
}
2 üstteki kodda global keywordu dışında tüm global değişkenleri içinde tutan $GLOBALS süper global dizisi ilede fonksiyonun lokal bölgesinde global bölgede oluşturulan değişkenimizi kullanabilirdik.


Kod:
$globalDegisken = "Master";

function yazdir()
{

     echo $GLOBALS['globalDegisken']; //$GLOBALS dizisi $_POST gibi bir süper globaldir

}

yazdir();

Şimdilik bu kadar yeter. Bu kısımlar biraz sıkıcı gibi gözüksede ileride daha gelişmiş kodları içeren yazılarda çok işimize yarayacaklar.