Menu
Coddy logo textTech

Nullable Tipler

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 64 / 91.

Bazen bir değer meşru bir şekilde mevcut olmayabilir. Bir kullanıcının ikinci adı olmayabilir veya bir arama sonuç döndürmeyebilir. Boş bırakılabilir türler (Nullable types), bir parametrenin, dönüş değerinin veya özelliğin belirli bir tür veya null olabileceğini açıkça belirtmenize olanak tanır.

Bir türü null yapılabilir yapmak için türün önüne bir soru işareti ? ekleyin:

<?php
class User {
    public ?string $middleName = null;
    
    public function __construct(
        public string $firstName,
        public string $lastName
    ) {}
    
    public function getFullName(): string {
        if ($this->middleName !== null) {
            return "$this->firstName $this->middleName $this->lastName";
        }
        return "$this->firstName $this->lastName";
    }
}

$user = new User("John", "Doe");
echo $user->getFullName();

Çıktı:

John Doe

Boş bırakılabilir (nullable) dönüş türleri de aynı şekilde çalışır. Bu, bir metodun aradığını bulamadığı durumlar için kullanışlıdır:

<?php
class UserRepository {
    private array $users = [];
    
    public function find(int $id): ?User {
        return $this->users[$id] ?? null;
    }
}

$repo = new UserRepository();
$user = $repo->find(1);
echo $user === null ? "Not found" : $user->firstName;

Çıktı:

Not found

Boş bırakılabilir (nullable) türleri kullanmak, kodunuzun amacını netleştirir. ?string gördüğünüzde, null değerinin geçerli bir değer olduğunu ve işlenmesi gerektiğini hemen anlarsınız. Soru işareti olmadan, null geçirmek bir tür hatasına neden olur.

challenge icon

Görev

Kolay

Nullable türleri kullanarak isteğe bağlı bilgileri düzgün bir şekilde işleyen bir kişi yönetim sistemi oluşturalım. Herkes tüm bilgilerini sağlamaz, bu nedenle sisteminizin eksik verileri zarif bir şekilde işlemesi gerekir.

Kodunuzu üç dosya halinde düzenleyeceksiniz:

  • Contact.php — Kişi listenizdeki bir kişiyi temsil eden bir Contact sınıfı oluşturun. Bazı bilgiler zorunludur, ancak diğer ayrıntılar isteğe bağlıdır:
    • Zorunlu bir $name (string) ve isteğe bağlı bir $phone (nullable string, varsayılan değeri null) için constructor promotion kullanın
    • null olarak başlatılan nullable bir string özelliği $email ekleyin
    • Email özelliğini ayarlayan bir setEmail(?string $email): void metodu oluşturun
    • Kişinin bilgilerini şu formatta döndüren bir getContactInfo(): string metodu oluşturun: "Name: [name]", ardından yalnızca telefon null değilse " | Phone: [phone]" ve ardından yalnızca e-posta null değilse " | Email: [email]"
  • ContactBook.php — Kişileri saklayan ve arayan bir ContactBook sınıfı oluşturun. Contact dosyasını dahil edin. Sınıf şunları yapmalıdır:
    • Kişileri saklamak için özel (private) bir diziye sahip olmalıdır
    • Koleksiyona bir kişi ekleyen bir addContact(Contact $contact): void metoduna sahip olmalıdır
    • Tam isim eşleşmesine göre bir kişiyi arayan ve bulunursa kişiyi, bulunamazsa null döndüren bir findByName(string $name): ?Contact metoduna sahip olmalıdır
  • main.php — ContactBook dosyasını dahil edin. Üç girdi alacaksınız: eklenecek bir isim, bir telefon numarası (veya telefon yoksa "none" dizesi) ve aranacak bir isim.

    Bir ContactBook oluşturun ve ilk iki girdiyi kullanarak yeni bir Contact ekleyin. Eğer telefon girdisi "none" ise, telefon numarası olarak null geçirin.

    Ardından üçüncü girdiyi kullanarak bir kişiyi arayın. Bulunursa, getContactInfo() kullanarak kişinin bilgilerini yazdırın. Bulunamazsa, "Contact not found" yazdırın.

Bu meydan okuma, nullable türlerin kodunuzun amacını nasıl netleştirdiğini gösterir — telefon veya e-posta için ?string gördüğünüzde, bu alanların isteğe bağlı olduğunu ve bir değere sahip olmayabileceğini hemen anlarsınız.

Kendin dene

<?php

require_once 'ContactBook.php';

// Girdileri oku
$nameToAdd = trim(fgets(STDIN));
$phoneInput = trim(fgets(STDIN));
$nameToSearch = trim(fgets(STDIN));

// TODO: Bir ContactBook örneği oluşturun

// TODO: Telefon değerini belirleyin (girdi "none" ise null, aksi takdirde girdiyi kullanın)

// TODO: İsim ve telefon ile yeni bir Contact oluşturun

// TODO: Kişiyi ContactBook'a ekleyin

// TODO: nameToSearch kullanarak bir kişiyi arayın

// TODO: Bulunursa, getContactInfo() kullanarak kişinin bilgilerini yazdırın
// TODO: Bulunamazsa, "Contact not found" yazdırın

?>
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler