1~

Minter Coder's Blog

23-PHP'de OOP

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.

  1. Encapsulation : "Information Hiding" olarak bilinir. Sınıfta nesneleri kimlerin kullanacağını belirtmek için kullanılan yöntemdir.
  2. 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.
  3. Polymorphism : Bir ana sınıftan (base class) türetilmiş classlar olarak bilinir. Poly
  4. 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();
?>
  1. Interface
  • Soyut metotlar ve sabitler içerir.
  • Sadece public method tanımlanabilir.
  • Bir class üzerinde birden fazla interface implement edilebilir.
  1. 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){

        }
    }
?>