1~

Minter Coder's Blog

6-PHP'de Sihirli Satırlar (Magic Lines)

6-PHP Magic Lines (Sihirli Satırlar)

Ön-tanımlı olarak bazı sabitler vardır php'de bunlara magic lines denir.Bunların hepsi compile-time'da değerleri belirlenir. 9 tane magical constant(sihirli sabit) vardır.

  1. __LINE__
  2. __FILE__
  3. __DIR__
  4. __FUNCTION__
  5. __CLASS__
  6. __METHOD__
  7. __TRAIT__
  8. __NAMESPACE__
  9. __ClassName::class__

Magical Constants

  1. __LINE__ : Kullanıldığı satırın numarasını dönderir.
    <?php
    echo "SATIR NUMARASI " . __LINE__ . "<br>"; // 2.satır
    ?>
  2. __FILE__ : Kodların yazıldığı php dosyasının full path'ini ve dosya ismini geri dönderir.
    <?php
    echo "Dosya ismi ve full path : " . __FILE__ . "<br>"; // Dosya ismi ve full path : /opt/lampp/htdocs/PHP_TURKCE/7-magic_lines.php 
    ?>
  3. __DIR__ : PHP dosyasının klasörünün full path'ini dönderir.
    <?php 
    echo "Klasör İsmi : " . __DIR__ . "<br>"; // Klasör İsmi : /opt/lampp/htdocs/PHP_TURKCE
    ?>
  4. __FUNCTION__ : Bu sabit hangi fonksiyon içerisinde kullanılıyorsa , fonksiyonun ismini gösterir.
    <?php 
    function MyPhp(){
     echo "Fonksiyon ismi : " . __FUNCTION__ . "<br>"; // Fonksiyon ismi : MyPhp
    }
    MyPhp();
    ?>
  5. __CLASS__ : Bu sabit hangi class içerisinde kullanılıyorsa, class'ın ismini gösterir.
    <?php 
    class Employee {
     function getEmployeeName(){
         echo "Class ismi ve fonksiyon ismini birlikte yazalım : ". __CLASS__ . " " . __FUNCTION__ . "<br>"; // Class ismi ve fonksiyon ismini birlikte yazalım : Employee getEmployeeName
     }
    }
    $employee = new Employee();
    $employee->getEmployeeName();
    ?>
  6. __METHOD__ : BU sabit class'ın method namesini dönderir.__FUNCTION__ benzerdir.
<?php 
class Calisan {
    function getCalisanName(){
        echo "__METHOD__ ciktisi : " . __METHOD__ . "<br>"; // __METHOD__ ciktisi : Calisan::getCalisanName
    }
}
$calisan = new Calisan();
$calisan->getCalisanName();
?>
  1. __TRAIT__ : Bulunduğu trait'in ismini geri dönderir. PHP'de trait bir özelliktir ve başka classların bu traitleri kullanılmasını sağlar. OOP'de inherit özelliğini bi nevi sağlamaktır. Yazdırılabilir kodları birden fazla yazdırmamak için kullanılır. PHP Çoklu kalıtımı desteklemez traitler sayesinde birden fazla özellik olan (fonksiyonlar veya properties) ekleyebiliriz.
<?php 
trait Yazdirilabilir {
    public function yazdir($mesaj) {
        echo $mesaj . " trait name : " . __TRAIT__ . "<br>"; // mesaj trait name : Yazdirilabilir
    }
}

class Yazici {
    use Yazdirilabilir;
}

$yazici = new Yazici();
$yazici->yazdir("mesaj");
?>
  1. __NAMESPACE__ : Bu constant bulunduğu namespace'nin ismini geri dönderir. Büyük projelerde namespace'ler kullanılarak class içerilerinde çakışmaların önlenmesi için kullanılır C#'da da aynı mantık bulunmaktadır.Örneğin laravel frameworkündekine benzer bir namespace yapalım.
<?php 
namespace App\Models;
class User {
    public function __construct()
    {
        echo "User sınıfı içerisinde namespace ismi :  " . __NAMESPACE__ . "<br>";
    }
}
$user = new User();

?>
  1. __ClassName::class__ : Bu class ile başlayıp bitmez. Bulunduğumuz class'ın ismi verilir örneğin User::class yazılarak class'ın bulunduğu namespaceyle birlikte full path verilir.
<?php
namespace App\Models;
class Car {
    public function __construct()
    {
        echo "Full path : " . Car::class . "<br>"; // Full path : App\Models\Car
    }
}
$car = new Car();
?>