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 DoeBoş 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 foundBoş 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.
Görev
KolayNullable 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 birContactsı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ğerinull) için constructor promotion kullanın nullolarak başlatılan nullable bir string özelliği$emailekleyin- Email özelliğini ayarlayan bir
setEmail(?string $email): voidmetodu oluşturun - Kişinin bilgilerini şu formatta döndüren bir
getContactInfo(): stringmetodu 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]"
- Zorunlu bir
ContactBook.php— Kişileri saklayan ve arayan birContactBooksı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): voidmetoduna sahip olmalıdır - Tam isim eşleşmesine göre bir kişiyi arayan ve bulunursa kişiyi, bulunamazsa
nulldöndüren birfindByName(string $name): ?Contactmetoduna 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
ContactBookoluşturun ve ilk iki girdiyi kullanarak yeni birContactekleyin. Eğer telefon girdisi"none"ise, telefon numarası olaraknullgeç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
?>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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesneler$this Anahtar KelimesiMetotlarÖzelliklerYapıcı Metot (__construct)Yıkıcı Metot (__destruct)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar KelimesiMetot Geçersiz Kılmafinal Anahtar KelimesiSoyut SınıflarÖzet - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicilere Derinlemesine BakışGetter ve Setter MetotlarıBilgi GizlemeConstructor Promotion (8.0)Özet - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımDependency InjectionAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlama: Derinlemesine İncelemeGenerator'lar ve Iterator'lar13Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı2İsim Alanları ve Autoloading
İsim Alanlarına Girişuse Anahtar KelimesiPSR-4 Autoloading StandartıComposer AutoloaderÖzet - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Fazla Arayüz UygulamaArayüz vs Soyut SınıfArayüzler ile Tip BelirlemeÖzet - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Nesne Klonlama__serialize & __unserializeÖzet - Özel Koleksiyon11Tip Sistemi ve Hata Yönetimi
Tip BildirimleriNullable TiplerBirleşim ve Kesişim Tipleriİstisna SınıflarıÖzel İstisna HiyerarşisiTry, Catch, FinallyÖzet - Form Doğrulayıcı3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerReadonly Özellikler (PHP 8.1)Özet - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmaya Yeniden BakışArayüzler ile Çok BiçimlilikType Hinting ve Union TypesLate Static BindingÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişÇoklu Trait KullanımıTrait Çakışma ÇözümüTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım12Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı15Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi