PHP

Regular Expressions (Düzenli İfadeler)

Adından da anlaşıldığı üzere bir metnin içindeki verinin, belli kurallara göre değiştirilmesi veya bulunması işlemidir.

Test için http://www.regexr.com/ adresini kullanabilirsiniz.

Dot Matches (Nokta Eşleşmeleri)

. herhangi bir karakteri temsil eder. /./ ifadesini uyguladığımızda metindeki tüm veriyi seçer.

SnapCrab_No-0006

Herhangi bir veriyi veya verileri seçmek istiyorsak eğer

SnapCrab_No-0007

Optional (?)

Bir karakteri veya karakterleri isteğe bağlı olarak var veya yok sayar.

Örneğin bir metinde “color” kelimesini aradığımızda aynı zamanda, aynı manada olan “colour” kelimesini de aramamız gerekir.  u karakterinin isteğe bağlı olması gerekir.

SnapCrab_No-0008

 

Birden fazla karakter isteğe bağlı olduğu zaman ()?  parantezin içine yazılır.

SnapCrab_No-0009

Character Set [A-Za-z0-9]

Bize karakter tanım aralığı sunar. [0-9], [1-5], [a-z], [A-Z], [@_#], [İÜ] vs.

SnapCrab_No-0011

SnapCrab_No-0012SnapCrab_No-0013 SnapCrab_No-0014

 

Multiple * +

* karakterin veya karakterlerin hiç olmaması veya tekrarlanmasıdır. Örneğin e*

+ karakterin veya karakterlerin 1 defa olması veya tekrarlamasıdır. Örneğin e+

SnapCrab_No-0015 SnapCrab_No-0016

 

Quanfiers {}

Belli bir aralıkta karakterin veya karakterlerin devam etmesidir. Örnek e{1}, [a-z]{5} vs.

SnapCrab_No-0021 SnapCrab_No-0022 SnapCrab_No-0023

Alternations |

Birkaç hecenin (karakterlerin) veya işlemine tabi tutulmasıdır.

SnapCrab_No-0017SnapCrab_No-0018

 

Anchors & Flags

^ Satır başını temsil eder.

$ Satır sonunu temsil eder.

Flags

i: ignore case (küçük-büyük harf duyarsız)

g: global

m: multiline (birden çok satır)

SnapCrab_No-0024

Groups ()

Grupların yakalanması (bulunması) işlemidir.

SnapCrab_No-0019

 

1. parantez $1, 2. parantez $2 dir. Biz adresleri alacağımız için bu parantezleri iptal edip (?:) metnin tamamını parantez içine alırız.

SnapCrab_No-0020

 

PHP Kullanım

<?php

$regex = '/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[a-zA-Z]{2,4}/';

$string = 'ibasoglu@example.com';

if(preg_match($regex, $string)){
	echo 'Bu e-mail adresidir.';
}else{
	echo 'Bu e-mail adresi değildir.';
}

//Çıktı: Bu e-mail adresidir.
?>

 

JavaScript Kullanım

var regex = new RegExp('[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[a-zA-Z]{2,4}', 'g');
var string = 'ibasoglu@example.com';

if(regex.exec(string)){
    console.log('Bu e-mail adresidir.');
}else
    console.log('Bu e-mail adresi değildir.');

//Çıktı: Bu e-mail adresidir.

 

Hayırlı günler, sağlıcakla kalın.

Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.

TCMB Kurlar

Class

<?php
/*
	Class: TCMBKur
	Author: ibasoglu
	Website: http://www.ibasoglu.com
	Date: 27.01.2015
*/

class TCMBKur{
	private $URL = 'http://www.tcmb.gov.tr/kurlar/today.xml';
	private $kur = array();
	public $tarih = '';
	public $bulten_no = '';

	public function TCMBKur(){
		$xml = simplexml_load_file($this->URL);
		
		$this->tarih = (string) $xml->attributes()->Tarih;
		$this->bulten_no = (string) $xml->attributes()->Bulten_No;

		foreach ($xml->Currency as $d) {
			$this->kur[(string)$d->attributes()->Kod] = array(
				'Isim' 	=> (string) $d->Isim,
				'DA'	=> (float) $d->ForexBuying,
				'DS'	=> (float) $d->ForexSelling,
				'EA'	=> (float) $d->BanknoteBuying,
				'ES'	=> (float) $d->BanknoteSelling
			);
		}
	}

	public function Convert($de = array()){
		$results = array();

		foreach ($de as $d) {

				$kur = $this->kur[$d[0]];

				$results[] = array(
					'dkod' 	=> $d[0] . '/TRY',
					'birim'	=> $d[1],
					'dcins'	=> $kur['Isim'],
					'DA' 	=> $kur['DA'] * $d[1],
					'DS'	=> $kur['DS'] * $d[1],
					'EA' 	=> $kur['EA'] * $d[1],
					'ES' 	=> $kur['ES'] * $d[1]
				);
		}

		return $results;
	}
}

 

Kullanımı

<html>
	<head>
		<meta charset="utf-8">
	</head>
	<body>
		<table border="1" style="border:1px">
			<thead>
				<tr>
					<th>Döviz Kod</th>
					<th>Birim</th>
					<th>Döviz Cinsi</th>
					<th>Döviz Alış</th>
					<th>Döviz Satış</th>
					<th>Efektif Alış</th>
					<th>Efektif Satış</th>
				</tr>
			</thead>
			<tbody>

<?php
require 'TCMBKur.class.php';

$TCMB = new TCMBKur();

$d = array(
	array('USD', 1.00),
	array('AUD', 1.00),
	array('DKK', 1.00),
	array('USD', 1.00),
	array('EUR', 1.00),
	array('GBP', 1.00),
	array('CHF', 1.00),
	array('SEK', 1.00),
	array('CAD', 1.00),
	array('KWD', 1.00),
	array('NOK', 1.00),
	array('SAR', 1.00),
	array('JPY', 1.00),
	array('BGN', 1.00),
	array('RON', 1.00),
	array('RUB', 1.00),
	array('IRR', 1.00),
	array('CNY', 1.00),
	array('PKR', 1.00)
);

$r = $TCMB->Convert($d);

foreach ($r as $de) {
	echo "<tr>
			<td>{$de['dkod']}</td>
			<td>{$de['birim']}</td>
			<td>{$de['dcins']}</td>
			<td>{$de['DA']}</td>
			<td>{$de['DS']}</td>
			<td>{$de['EA']}</td>
			<td>{$de['ES']}</td>
		</tr>";
}

echo "</tbod>
	<tfoot>
		<tr>
			<td colspan=\"7\">Tarih: {$TCMB->tarih}  Bülten No: {$TCMB->bulten_no}</td>
		</tr>
	</tfoot>"
?>

		</table>
	</body>
</html>

SnapCrab_No-0005

PHP OOP Oto Sınıf Yükleme (Autoloading Class) Metodu

Selamün Aleyküm Arkadaşlar;

Bir sınıfı türettirmeden önce __autoload($sinif_isim) fonksiyonu tetiklenir. Bu yöntem her defasında sınıfın olduğu sayfayı entegre etmememizi sağlar. Yani otomatik olarak dahil edilir.

class klasöründe cls.ogr.php dosyasında ogr isminde sınıfımız olsun.

//dizin: /class/cls.ogr.php
class ogr
{
	public function __construct()
	{
		echo 'ogr sınıfı türetildi...<br />';
	}
}
//dizin: /index.php
$ogr = new ogr();

Bu şekilde ogr sınıfını türettirdiğimiz zaman hata meydana gelir. Çünkü sınıfımız class/cls.ogr.php içinde olduğu için. Onu sayfaya dahil etmemiz gerekir. Bu işlemleri include, include_once, require, require_once komutlarıyla sayfayı dahil ederiz. Ama biz burada __autoload metodunu kullanacağız.

//dizin: /index.php
function __autoload($sinif_isim)
{
	echo 'cls.' . $sinif_isim . '.php sayfası dahil ediliyor...<br />';
	require_once 'class/cls.' . $sinif_isim . '.php';
}

$ogr = new ogr();

ogr sınıfı türetilmeden önce __autoload metodu çalışır. require_once ‘class/cls.ogr.php’ dosyasını dahil eder. Sonra ogr sınıfı türetilir.

Sınıf türetilirken hata meydana gelebilir. Hatayı yakalamak için try catch bloklarını kullanabiliriz. Bu özellik PHP 5.3.0 dan beri vardır. Önceki sürümlerde çalışmaz.

//dizin: /index.php
function __autoload($sinif_isim)
{
	echo "cls.$sinif_isim.php sayfası dahil ediliyor...<br />";
	if(file_exists("class/cls.$sinif_isim.php"))
		require_once "class/cls.$sinif_isim.php";
	else
		throw new Exception("cls.$sinif_isim.php isminde bir dosya bulunamadı.");
}

try
{
	$ogr = new ogr1();
}
catch (Exception $e)
{
	echo $e->getMessage();
}

ogr1 sınıfı olmadığı için catch bloğu çalıştırılacaktır.

 

Hayırlı günler, sağlıcakla kalın.

Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.

PHP OOP Sihirli Yöntemler (Magic Methods)

Selamün Aleyküm Arkadaşlar;

PHP’nin sınıflara ait bazı özel metodları vardır.

__call()
Tanımlanmayan bir metod çağırıldığı zaman tetiklenir. İki parametre alır. Çağırılan metod ismi ve metoda gönderilen parametre-ler.

class ogr
{
	public $ad;

	public function __call($f_isim, $parametreler)
	{
		echo $f_isim . " isimli bir metod tanımlı değildir. " . implode(', ', $parametreler) . " değer-ler atanamaz.";
	}
}

$ogr = new ogr();
$ogr->adgetir("paramdeger");
//Ekran çıktısı: adgetir isimli bir metod tanımlı değildir. paramdeger değer-ler atanamaz.

 

__callStatic()
PHP 5.3.0 sürümünde eklenmiştir. Tanımlı olmayan bir static metodu çağırdığımızda tetiklenir. Parametre olarak çağırılan metod ismi ve parametre-leri alır.

class ogr
{
	public $ad;

	public function __callStatic($f_isim, $parametreler)
	{
		echo "static" . $f_isim . " isimli bir metod tanımlı değildir. " . implode(', ', $parametreler) . " değer-ler atanamaz.";
	}
}
$ogr = new ogr();
ogr::adgetir("paramdeger");

 

__get($degiskenisim)
Bir değişkeni çağırdığınızda o değişken sınıfta yoksa __get($degiskenisim) metodu tetiklenir. Parametre olarak değişken ismini verir.

class ogr
{
	public $ad;

	public function __get($d_isim)
	{
		echo $d_isim . " isimli değişken tanımlı değildir.";
	}
}

$ogr = new ogr();
echo $ogr->ad1;
//Ekran çıktısı: ad1 isimli değişken tanımlı değildir.

ad1 değişkeni ogr sınıfında tanımlı olmadığı için __get metodu tetiklenir.

 

__set($degiskenisim, $degiskendeger)
Tanımlı olmayan bir değişkene değer atanmaya çalışıldığında tetiklenir. Parametre olarak iki tane parametre alır. Değişken ismi ve değişken değer.

class ogr
{
	public $ad;

	public function __set($d_isim, $d_deger)
	{
		echo $d_isim . " isimli değişken tanımlı değildir. " . $d_deger . " değerini atayamazsınız.";
	}
}
$ogr = new ogr();
$ogr->ad1="Veli";
//Ekran çıktısı: ad1 isimli değişken tanımlı değildir. Veli değerini atayamazsınız.

ad1 degişkeni tanımlı olmadığı ve değer atamaya çalıştığımız zaman __set metodu tetiklenir.

 

__invoke()
Bu özellik PHP 5.3.0’dan beri eklenmiştir. Sınıfa bir parametre gönderdiğimiz zaman tetiklenir. Kullanımı şu şekildedir.

class ogr
{
	public $ad;

	public function __invoke($param)
	{
		echo implode(", ", $param) . " parametre-ler gönderilmiş bir __invoke() metoduyum.";
	}
}
$ogr = new ogr();
$ogr("param-deger");

 

__tostring()
Sınıf ekrana çıktılandığında çalışır. Yani türettiğimiz bir sınıfa echo, print uygularsak __tostring() metodu tetiklenir. Geriye yazılacak bir nesne göndermelidir.

class ogr
{
	public function __tostring()
	{
		return get_class($this) . " sınıfının __tostring() metoduyum.";
	}
}

$ogr = new ogr();
echo $ogr;
//Ekran çıktısı: ogr sınıfının __tostring() metoduyum.

echo $ogr komutuyla __tostring() metodu tetiklendi ve return’le dönen kayıt çıktı olarak yazıldı.

 

__clone()
Bir değişkende bulunan sınıfı başka bir değişkene klonladığımızda __clone() metodu tetiklenir.

class ogr
{
	public function __clone()
	{
		echo get_class($this) . " sınıfının __clone() metoduyum.";
	}
}

$ogr = new ogr();
$tmpogr = clone $ogr;
//Ekran çıktısı: ogr sınıfının __clone() metoduyum.

 

Hayırlı günler, sağlıcakla kalın.

Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.

PHP OOP Giriş

Selamün Aleyküm Arkadaşlar;

PHP OOP’nin (Object Oriented Programming – Nesne Yönelimli Programlama) temeli sınıflardan (class) oluşur.

PHP’de sınıf (class) tanımlaması şu şekilde yapılır:

class isim
{

}

Oluşturduğumuz sınıfı kullanabilmemiz için onun görüntüsünü (instance) oluşturmamız gerekir. Görüntüsünü oluşturmak için new kodunu kullanırız.

$degisken = new isim();

$değisken adındaki bir değişkene (variable) sınıfımızın görüntüsü atadık.

Sınıfımızda değişken tanımlamak istersek eğer bir erişim sağlayıcısıyla (public, private, protected) beraber yazmamız gerekir. Yoksa PHP’de hata meydana gelir.

class isim
{
	public $degisken;
}

Fonksiyon (Function)

PHP’de fonksiyonlar (function) iki türlüdür. Geriye değer döndüren veya döndürmeyen.

Eğer geriye değer döndüreceksek return komutunu kullanırız.

function fonkisim
{
	//Kodlar
	return "değer";
}

Fonksiyonun alt program olarak kullanımı:

function fonkisim
{
	echo "Bu bir Alt programdır.";
}

Bir fonksiyona dışarıdan parametre yollarak kullanılması:

function fonkisim($param)
{
	//Kodlar
}

Bir fonksiyondan sınıfımıza ait bir değişkene veya metoda erişmemiz için $this kodunu kullanırız.

class isim
{
	public $degisken;

	function degiskendegerata($deger)
	{
		$this->degisken = $deger;
	}
}

$isim = new isim();
$isim->degiskendegerata("deger");

 

Yapıcı (__construct) Metod

Sınıf türetildiği zaman ilk tetiklenecek metoddur. Geriye değer döndüremez.

class isim
{
	function __construct()
	{
		echo "Ben ilk çalışan metodum...";
	}
}

Yıkıcı (__destruct) Metod

Sınıf türetildikten sonra, en son tetiklenir. Sınıf kapatılırken yok edildiği anda çalışan metoddur. Sınıfta Exit() metoduyla sonlarılsa dahi bu metod çalışır.

class isim
{
	function __destruct()
	{
		echo get_class($this) . " sınıfı yokediliyor...";
	}
}

static Anahtar Sözcüğü

static olarak tanımlanmış, sınıf özelliklerine veya yöntemlerine türettirmeden ulaşabiliriz. Normal olarak türetilmiş bir sınıftan static olan nesneye erişilemez. isim::$staticnesneisim olarak erişilebilir. Sınıfta oluşturulmuş bir static nesneye sınıftan self::$staticnesneisim olarak erişilir.

class isim
{
	public static $degisken;

	function __construct()
	{
		self::$degisken= "deger";
	}
}

$isim=new isim();
echo isim::$degisken;

 

Hayırlı günler, sağlıcakla kalın.

Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.

İç İçe Fonksiyonun (Recursive Function) PHP’de kullanımı

Selamün Aleyküm Arkadaşlar;

Fonksiyonun içinde işlem bitene kadar, tekrar tekrar o fonksiyonu çağırabiliriz. Bu işleme iç içe fonksiyon (recursive function) denir.

Örnek olarak bir faktoriyel işlemini for döngüsüyle değilde, iç içe fonksiyonla yapalım.

function faktoriyel($n)
{
	if($n==0)
		return 1;
	else
		return $n * faktoriyel($n-1);
}

echo faktoriyel(5);

Burada $n değişkeni sıfırdan farklı olduğu sürece döner. faktoriyel fonksiyonunu çağırır.

Adım adım işleme bakacak olursak:

return $n * faktoriyel($n-1) //5 * faktoriyel(4)
return $n * faktoriyel($n-1) //faktoriyel(4) = 4 * faktoriyel(3)
return $n * faktoriyel($n-1) //faktoriyel(3) = 3 * faktoriyel(2)
return $n * faktoriyel($n-1) //faktoriyel(2) = 2 * faktoriyel(1)
return $n * faktoriyel($n-1) //faktoriyel(1) = 1 * faktoriyel(0)
return faktoriyel(0)=1 //$n==0 olduğundan geriye 1 değerini döndürerek fonksiyonunu bitirir.
//return 5*4*3*2*1*1

Başka bir örnek olarak bir dizinin içinde olan değeri yazdıralım.

$dizi=array(
		array(
			array(
				array(
					array(
						array(
							array(
								array(
									array(
										array(
											array(
												'Merhaba Dünya!'
											)		
										)
									)
								)
							)
						)
					)
				)
			)
		)
);

function dizideger($dizi)
{
	foreach ($dizi as $deger)
	{
		if(is_array($deger))
			return dizideger($deger);
		else
			return $deger;
	}
}

echo dizideger($dizi); //Ekran çıktısı Merhaba Dünya!

 

Hayırlı günler, sağlıcakla kalın.

Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.