Giriş
PHP 7.4, tip sistemini geliştirmek amacıyla birçok yeni özellik sunmuştur ve bu özelliklerden biri de “typed properties” yani “tiplendirilmiş özellikler”dir. Bu özellik, sınıf üyelerine belirli veri türleri atayarak daha katı bir tip kontrolü sağlar. Tiplendirilmiş özellikler, devre dışı bırakılmadıkça hataların erken aşamada tespit edilmesine yardımcı olur ve kodun okunabilirliğini artırır. Ayrıca, geliştiricilerin daha net bir şekilde niyetlerini ifade etmelerine olanak tanır.
Tiplendirilmiş Özelliklerin Tanıtımı
PHP’de tiplendirilmiş özellikler, bir sınıf içinde tanımlanan değişkenlerle birlikte kullanılmak üzere belirli bir veri türü belirtmeyi mümkün kılar. Bu, sınıf özelliklerinin ya da nesne özelliklerinin belirli bir türde olması gerektiği anlamına gelir. Örneğin, bir özelliği `string`, `int`, `float`, `bool`, `array`, `object`, `callable`, `iterable` gibi veri türlerini kullanarak tiplendirmek mümkündür.
Temel Kullanım
Aşağıda, tiplendirilmiş özelliklerin temel bir kullanım örneği bulunmaktadır.
“`php
class Person {
public string $name;
public int $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
public function greet(): string {
return “Hello, my name is $this->name and I am $this->age years old.”;
}
}
$person = new Person(“John”, 30);
echo $person->greet();
“`
Yukarıdaki örnekte `Person` sınıfının `name` ve `age` adında iki tiplendirilmiş özelliği bulunmaktadır. `name` özelliği `string` türünde, `age` ise `int` türünde olarak tanımlanmıştır. `__construct` metodu, sınıf örneklemesi sırasında bu özelliklere değer atamak için kullanılır.
Hata Yönetimi
Tiplendirilmiş özellikler, yanlış türde veri atanması durumunda hata fırlatır. Aşağıdaki örnek, tip hatasının nasıl meydana geleceğini göstermektedir.
“`php
class Product {
public string $title;
public float $price;
public function __construct(string $title, float $price) {
$this->title = $title;
$this->price = $price;
}
}
$product = new Product(“Laptop”, 999.99);
// Aşağıdaki satır bir TypeError fırlatır
$product->price = “not a number”;
“`
Bu örnekte, `price` özelliğine bir `string` türünde değer atanması, `TypeError` hatasına sebep olacaktır. Bu durum, geliştiricinin hatayı hemen fark etmesine yardımcı olur.
Varsayılan Değerler
PHP 7.4 ile birlikte, tiplendirilmiş özellikler için varsayılan değerler de atanabilir. Aşağıdaki örnek, varsayılan değerlerin nasıl kullanılabileceğini göstermektedir.
“`php
class Car {
public string $brand;
public int $year = 2020; // Varsayılan değer
public function __construct(string $brand) {
$this->brand = $brand;
}
public function info(): string {
return “Brand: $this->brand, Year: $this->year”;
}
}
$car = new Car(“Toyota”);
echo $car->info();
“`
Bu örnekte, `year` özelliği için varsayılan bir değer olan `2020` atanmıştır. Sınıf oluşturulurken `year` değeri belirtilmediğinde varsayılan değer kullanılacaktır.
Nullable Properties
Tiplendirilmiş özellikler, `?` operatörü ile tiplendirilmiş özelliklerin `null` olabilmesine imkân tanır. Aşağıda, bu durumun nasıl uygulanacağını gösteren bir örnek bulunmaktadır.
“`php
class User {
public string $username;
public ?string $email; // Nullable tip
public function __construct(string $username, ?string $email = null) {
$this->username = $username;
$this->email = $email;
}
public function info(): string {
return “Username: $this->username, Email: ” . ($this->email ? $this->email : ‘Not provided’);
}
}
$user1 = new User(“Alice”);
$user2 = new User(“Bob”, “bob@example.com”);
echo $user1->info();
echo “\n”;
echo $user2->info();
“`
Bu örnekte, `email` özelliği `null` olabilen bir `string` türünde tanımlanmıştır. Kişi oluşturulurken `email` değeri sağlanmadığında, bu özellik `null` olarak saklanır.
Sonuç
PHP 7.4 ile birlikte gelen tiplendirilmiş özellikler, geliştiricilere daha katı bir tip sistemi sunarak uygulama geliştirmenin daha güvenli ve anlaşılır hale gelmesini sağlar. Özellikle büyük projelerde, kodun daha okunabilir ve bakımı daha kolay hale gelmesine katkı sağlar. Geliştiricilerin daha iyi bir hata ayıklama deneyimi yaşayabilmesi için önemli bir adım niteliğindedir. Bu özelliklerin kullanılması, yazılım geliştirme süreçlerinde iyi bir uygulama örneği olarak gösterilebilir.


