PHP 8'de Öznitelikler: Sözdizimi ve Kullanımı
PHP 8'in yeni özelliklerinden biri olan Öznitelikler (Attributes), kodun içindeki sınıflara, metodlara, özelliklere (properties), fonksiyonlara veya parametrelere ek anlam veya davranış bilgisi kazandırma imkânı sunar. Bu özellik, PHPDoc yorumları veya harici açıklama sistemleri yerine artık yerleşik bir PHP özelliği olarak kullanılabilir.
Özniteliklerin Amacı
Öznitelikler, bir koda ek anlam veya davranış bilgisi kazandırmak için kullanılır. Bu bilgiler genellikle framework'ler, kütüphaneler veya sistemler tarafından okunur ve işlenir. Örnek kullanım alanları:
- Bir sınıfı belirli bir route (URL) ile ilişkilendirmek.
- ORM sistemlerinde (örneğin Doctrine) tablo sütunlarını tanımlamak.
- Test veya güvenlik açıklamaları eklemek.
PHP 8 Öncesi Durum
PHP 8 öncesinde meta veriler genellikle yorum satırlarında PHPDoc şeklinde yazılırdı. Bu yaklaşımda PHP'nin yorumları yorumlayabilmesi için harici bir parser (yorum okuyucu) kullanılması gerekiyordu.
PHP 8'de Öznitelik Sözdizimi
PHP 8 ile artık öznitelikler #[...] biçiminde doğrudan kodun içine yazılabilir. Örneğin:
#[Route('/users', methods: ['GET'])]
class UserController {
// ...
}
Böylece #[Route(...)] bir özniteliktir ve PHP tarafından okunabilir meta veri olarak kabul edilir.
Temel Sözdizimi
Öznitelik sözdizimi, # işaretinden sonra AttributeAdı ile başlayan parametrelere sahip bir dizi ile gösterilir. Örnekler:
- #[Loggable]
- #[Table(name: "users")]
- #[Column(type: "string", length: 255)]
Birden fazla öznitelik aynı yere yazılabilir:
- #[Serializable, Deprecated]
class EskiSinif {}
Öznitelik Tanımlama
Kendi özel özniteliklerinizi de oluşturabilirsiniz. Bunun için #[Attribute] özniteliğiyle işaretlenmiş bir sınıf tanımlanır. Örneğin:
#[Attribute]
class Route {
public function __construct(
public string $path,
public array $methods = ['GET']
) {}
}
Bu tanımdan sonra bu özniteliği kullanabilirsiniz:
#[Route('/home', methods: ['GET', 'POST'])]
class HomeController {}
PHP 8'in yeni özelliklerinden biri olan Öznitelikler (Attributes), kodun içindeki sınıflara, metodlara, özelliklere (properties), fonksiyonlara veya parametrelere ek anlam veya davranış bilgisi kazandırma imkânı sunar. Bu özellik, PHPDoc yorumları veya harici açıklama sistemleri yerine artık yerleşik bir PHP özelliği olarak kullanılabilir.
Özniteliklerin Amacı
Öznitelikler, bir koda ek anlam veya davranış bilgisi kazandırmak için kullanılır. Bu bilgiler genellikle framework'ler, kütüphaneler veya sistemler tarafından okunur ve işlenir. Örnek kullanım alanları:
- Bir sınıfı belirli bir route (URL) ile ilişkilendirmek.
- ORM sistemlerinde (örneğin Doctrine) tablo sütunlarını tanımlamak.
- Test veya güvenlik açıklamaları eklemek.
PHP 8 Öncesi Durum
PHP 8 öncesinde meta veriler genellikle yorum satırlarında PHPDoc şeklinde yazılırdı. Bu yaklaşımda PHP'nin yorumları yorumlayabilmesi için harici bir parser (yorum okuyucu) kullanılması gerekiyordu.
PHP 8'de Öznitelik Sözdizimi
PHP 8 ile artık öznitelikler #[...] biçiminde doğrudan kodun içine yazılabilir. Örneğin:
#[Route('/users', methods: ['GET'])]
class UserController {
// ...
}
Böylece #[Route(...)] bir özniteliktir ve PHP tarafından okunabilir meta veri olarak kabul edilir.
Temel Sözdizimi
Öznitelik sözdizimi, # işaretinden sonra AttributeAdı ile başlayan parametrelere sahip bir dizi ile gösterilir. Örnekler:
- #[Loggable]
- #[Table(name: "users")]
- #[Column(type: "string", length: 255)]
Birden fazla öznitelik aynı yere yazılabilir:
- #[Serializable, Deprecated]
class EskiSinif {}
Öznitelik Tanımlama
Kendi özel özniteliklerinizi de oluşturabilirsiniz. Bunun için #[Attribute] özniteliğiyle işaretlenmiş bir sınıf tanımlanır. Örneğin:
#[Attribute]
class Route {
public function __construct(
public string $path,
public array $methods = ['GET']
) {}
}
Bu tanımdan sonra bu özniteliği kullanabilirsiniz:
#[Route('/home', methods: ['GET', 'POST'])]
class HomeController {}


