PHP OOP namespace
OOP ile yazılım geliştirirken sınıfları gruplamak/parçalara ayırmak için kullanılan namespace ile ilgili bilgiler yer almaktadır.
PHP OOP namespace nedir?
OOP ile yazılım geliştirirken aynı ada sahip birden fazla sınıf olması durumda karışıklığı en aza indirmek için kullanılan bir yapıdır.
Bu yapı klasör/dizin yapısına benzetilebilir.
Tanımlamak için namespace anahtar kelimesi kullanılır.
<?php
namespace IlkOkul;
class Ogrenci { }
?>
Tanımlama yaparken dosyadaki ilk komutun namespace olması gerekir.
Aksi takdirde PHP Fatal Error verecektir.
<?php
echo "Merhaba Dünya"; // hata verecektir.
namespace IlkOkul;
class Ogrenci { }
?>
Bir dosya içinde birden fazla namespace olabilir.
<?php
namespace IlkOkul;
class Ogrenci {
}
namespace Lise;
class Ogrenci {
}
?>
Karışıklığı önlemek için namespace kapsama alanı süslü parantez ile belirtilebilir.
<?php
namespace IlkOkul {
class Ogrenci {
}
}
namespace Lise {
class Ogrenci {
}
}
echo "Merhaba Dünya"; // hata verir.
?>
Kapsama alanı süslü parantez ile belirtilirse süslü parantez dışına PHP kodları (echo, print vb.) yazılmaz.
Bir dosya içinde genellikle tek namespace kullanılır.
Tanımlama ters çizgi (\) ile gruplara ayrılabilir.
<?php
namespace Ogrenciler\IlkOkul; // gruplara ayrılan namepsace
class Ogrenci {
}
namespace Ogrenciler\Lise;
class Ogrenci {
}
?>
Tanımlanan namespace içindeki sınıflara ters çizgi (\) ile erişilir.
<?php
namespace Ogrenciler\IlkOkul;
class Ogrenci {
}
namespace Ogrenciler\Lise;
class Ogrenci extends \Ogrenciler\IlkOkul\Ogrenci { // başka bir namespace erişim
}
$ben = new \Ogrenciler\IlkOkul\Ogrenci();
?>
Tanımlanan namespace’lerden birini seçmek için use anahtar kelimesi kullanılır.
<?php
include_once './namespace.php';
use Ogrenciler\IlkOkul\Ogrenci; // IlkOkul namepsace seçildi.
$ben = new Ogrenci();
echo get_class($ben);
?>
Benzer ada sahip namepsace’lere as anahtar kelimesiyle takma ad verilebilir.
<?php
include_once './namespace.php';
use Ogrenciler\IlkOkul\Ogrenci as YeniOgrenci; // IlkOkul içindeki Ogrenci sınıfı artık YeniOgrenci oldu.
use Ogrenciler\Lise\Ogrenci;
$ben = new YeniOgrenci();
echo get_class($ben);
?>
Kullanılan namespace adlarının dikkatli kullanılması faydalı olacaktır.
PHP OOP Derslerine buradan ulaşabilirsiniz…
Hayırlı günler dilerim.