30-OOP
OOP Nedir ?
1960'lı yıllarda yazılımcılar kod yazarken kodun karmaşıklığı ve fonksiyonel yazdıkları yüzünden çok fazla karışık kodlar oluşuyordu, sphagetti kodlar deniyor ve kodun okunurluğunu azaltıyordu, şirket sahipleri ise çok fazla para kaybediyordu bunu düzeltmek ve kod okunurluğunu artırmak, yazılımcıların birbirlerini daha kolay kod üzerinden anlayabilmesi için çıkarılmış yöntemdir.
Örneğin, bir yazılımcınız var ve işte çalışırken 1 yıl boyunca bir proje yazdı ve daha sonrasında işten ayrılma kararı aldı. Sonradan gelen yazılımcı eğer ki ayrılan yazılımcınız OOP kurallarına göre yazmayıp kendi kafasına göre yazmışsa eğer sonradan gelen yazılımcının kodları anlaması çok zor olacaktır. OOP'ye göre yazılmışsa çok kolay okunaklı olacaktır.
OOP'nin temel prensipleri vardır.Eğer ki bir programlama dilinde aşağıdaki 4 temel özellik yoksa OOP bir dil değildir.
- Encapsulation : "Information Hiding" olarak bilinir. Sınıfta nesneleri kimlerin kullanacağını belirtmek için kullanılan yöntemdir.
- Inheritance : Kod kalabalığını azaltma yöntemidir. Yani aynı işi yapan bir kodu, birden fazla kez yazmak yerine, inheritance ile child classlarda kolayca kullanabiliriz.
- Polymorphism : Bir ana sınıftan (base class) türetilmiş classlar olarak bilinir.
- Abstraction : Yalnızca ilgili verileri gösterdiğiniz ve kullanıcıdan bir nesnenin gereksiz ayrıntılarını gizlediğiniz süreçtir.
PHP CLASS
<?php
class Uye {
// variables,constants (property:özelliklerimiz)
public $ad;
public $soyad = "value";
const SAYI = 12;
// functions (methodlarımız)
function adGoster($ad){ // defaultda "public function"
return $ad;
}
function setAd($ad){
$this->ad=$ad;
}
function sabitGoster(){
return self::SAYI;
}
public function soyadGoster(){
return "Coder";
}
}
$uye = new Uye();
echo "$uye->soyad <br>"; // property çağırma
echo Uye::SAYI . "<br>";
echo $uye->soyadGoster(); // function çağırma
echo $uye->adGoster("Kerem");
?>
PHP MODIFIERS
public : Herkes (farklı class,farklı paketlerden) tarafından erişilebilir. private : Sadece bulunduğu class içerisinden propertylere erişim vardır. protected : Miras alınan class tarafından erişim sağlanır.
<?php
class Test {
public $a = 'a';
private $b = "c";
protected $c = "d";
public function returnB(){
return $this->b;
}
private function returnC(){
return $this->c;
}
protected function returnA(){
return $this->a;
}
}
$test = new Test();
echo $test->a;
// echo $test->c;
// echo $test->returnC();
// echo $test->b;
// echo $test->returnA();
echo $test->returnB();
?>
PHP Construct ve Destruct Methodlar
Construct : Yapıcı methodlardır.Nesne oluşturulurken ilk çalışan methoddur. Destruct : Nesne ile yeterince iş kalmadığında çalışan methoddur.
<?php
class DB {
private $db;
public function __construct($host,$kadi,$sifre)
{
$this->db = new PDO("mysql:host".$host,$kadi,$sifre);
}
public function __destruct()
{
$this->db = null;
}
public function getData(){
return "DB'den gelen data : Minter Coder<br>";
}
}
$db = new DB("localhost","root","root");
echo $db->getData();
?>
PHP Inheritance
<?php
class test {
protected $adsoyad = "Minter Coder";
public function merhaba(){
return "merhaba";
}
}
class test2 extends test {
public function dunya(){
return "dunya";
}
// Override
public function merhaba(){
// Parent classda aynı method ismi varsa return parent::merhaba(); test class'ındaki merhaba() çalışacak
return "merhaba2";
}
public function adSoyad(){
return $this->adsoyad;
}
}
$test2 = new test2();
echo $test2->merhaba(). " " . $test2->dunya() . "<br>";
echo $test2->adSoyad();
?>
PHP Final Deyimi
- Class üzerinde kullanıldığında artık class'ın inheritance özelliği kapanır.
- Method üzerinde kullanıldığında artık method üzerinde ki override özelliği kapanır.
<?php
class Marka {
}
class Model extends Marka {
}
//final class Seri extends Model {
class Seri extends Model{
final public function test2() {
}
}
class Urun extends Seri {
public function test(){
return "urun";
}
// public function test2(){
// }
}
$urun = new Urun();
echo $urun->test();
echo $urun->test2();
?>
PHP Static ve Sabit Değişkenlerin Kullanımı
Bellekte Static kısmında 1 defa tek oluşturulur. Static Örneği
<?php
class Test {
static public $a = 'Hello world';
public $b = "a";
static public function test(){
// echo $b erişim yoktur
return self::$a;
}
}
echo Test::test();
?>
Sabitler
<?php
class File {
const DIRECTORY = __DIR__;
public function getDirectory(){
return self::DIRECTORY;
}
}
$myFile = new File();
echo $myFile->getDirectory();
?>
PHP Abstraction
Soyut class base class olarak bilinir ve bir templatedir bu class'ın bir instance'yi oluşturulamaz.
<?php
abstract class Plugin { // soyut class
public $title;
public $content;
abstract public function setTitle($title);
abstract public function setContent($content);
public function show(){
echo "<h1> $this->title </h1>";
echo "<p> $this->content</p>";
}
}
class LastComments extends Plugin {
public function setTitle($title){
$this->title = $title;
}
public function setContent($content){
$this->content = $content;
}
}
$lastComments = new LastComments();
$lastComments->setTitle("Son Yorumlar");
$lastComments->setContent("Son yorumlar içeriği burada gözükecek.");
echo $lastComments->show();
?>
- Interface
- Soyut metotlar ve sabitler içerir.
- Sadece public method tanımlanabilir.
- Bir class üzerinde birden fazla interface implement edilebilir.
- Abstract
- Soyut metotlar, sabitler, normal metot ve properties içerebilir.
- public,protected,private access modifiers tanımlanabilir.
- Bir class sadece bir tane abstract class'ı extends edebilir
PHP Interface
<?php
interface CRUD2 {
const DIR = __DIR__;
public function create($tableName,$id);
public function read($tableName,$id);
public function update($tableName,$data,$id);
public function delete($tableName,$id);
}
interface DB extends CRUD2{
public function connection($host, $dbname, $user, $pass);
}
abstract class CRUD {
public $a = 5;
public function a(){
return $this->a;
}
abstract public function create();
abstract public function read();
abstract public function update();
abstract public function delete();
}
class Database implements DB {
public function connection($host, $dbname, $user, $pass){
}
public function create($tableName,$id){
}
public function read($tableName,$id){
}
public function update($tableName,$data,$id){
}
public function delete($tableName,$id){
}
}
?>