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.
__LINE__
__FILE__
__DIR__
__FUNCTION__
__CLASS__
__METHOD__
__TRAIT__
__NAMESPACE__
__ClassName::class__
Magical Constants
__LINE__
: Kullanıldığı satırın numarasını dönderir.<?php echo "SATIR NUMARASI " . __LINE__ . "<br>"; // 2.satır ?>
__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 ?>
__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 ?>
__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(); ?>
__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(); ?>
__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();
?>
__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");
?>
__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();
?>
__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();
?>