Tip Bildirimleri
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 63 / 91.
Tür bildirimleri, metotlarınızın ve özelliklerinizin tam olarak hangi türleri kabul etmesi ve döndürmesi gerektiğini belirtmenize olanak tanır. Bu, kodunuzu daha öngörülebilir hale getirir ve hataları erkenden yakalamanıza yardımcı olur - yanlış tür geçirilirse PHP bir hata fırlatacaktır.
Metot parametreleri, dönüş değerleri ve sınıf özellikleri için tür belirtebilirsiniz:
<?php
class Calculator {
public int $result = 0;
public function add(int $a, int $b): int {
$this->result = $a + $b;
return $this->result;
}
}
$calc = new Calculator();
echo $calc->add(5, 3);
Çıktı:
8PHP birkaç skaler türü destekler: int, float, string, bool ve array. Ayrıca sınıf adlarını, arayüzleri ve hiçbir şey döndürmeyen metotlar için object, mixed ve void gibi özel türleri de kullanabilirsiniz:
<?php
class Logger {
public function log(string $message): void {
echo "Log: $message";
}
}
$logger = new Logger();
$logger->log("System started");
Çıktı:
Log: System startedBir class veya interface ismiyle type-hint kullandığınızda, PHP yalnızca uyumlu nesnelerin kabul edilmesini sağlar. Bu, metotların manuel doğrulama yapmadan aldıkları verilere güvenebildiği, güvenilir OOP uygulamaları inşa etmek için temeldir.
Görev
KolayTür bildirimlerinin gücünü gösteren bir sıcaklık dönüştürücü oluşturalım. Metotların hangi türleri kabul ettiğini ve döndürdüğünü açıkça belirttiği, kodunuzu kendi kendini belgeleyen hale getiren ve tür hatalarını erkenden yakalayan bir sistem oluşturacaksınız.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
TemperatureConverter.php— Celsius ve Fahrenheit arasındaki dönüşümleri yöneten birTemperatureConvertersınıfı oluşturun. Sınıfınız şunları yapmalıdır:0.0olarak başlatılmış,$lastResultadında public birfloatözelliğine sahip olmalıdır- Celsius'u
(celsius * 9/5) + 32formülünü kullanarak Fahrenheit'a dönüştüren, sonucu$lastResultiçinde saklayan ve döndüren birtoFahrenheit(float $celsius): floatmetoduna sahip olmalıdır - Fahrenheit'ı
(fahrenheit - 32) * 5/9formülünü kullanarak Celsius'a dönüştüren, sonucu$lastResultiçinde saklayan ve döndüren birtoCelsius(float $fahrenheit): floatmetoduna sahip olmalıdır - Son sonucu, sonuç virgülden sonra 2 basamağa yuvarlanmış şekilde
"[lastResult] [unit]"formatında döndüren birformatResult(string $unit): stringmetoduna sahip olmalıdır $lastResultdeğerini tekrar0.0yapan ve hiçbir şey döndürmeyen birreset(): voidmetoduna sahip olmalıdır
main.php— TemperatureConverter dosyasını dahil edin. İki girdi alacaksınız: bir sıcaklık değeri ve bir dönüşüm yönü ("toF"veya"toC").Bir
TemperatureConverteroluşturun ve yöne bağlı olarak uygun dönüşümü gerçekleştirin. Ardından, doğru birim sembolünü (Fahrenheit için"°F"veya Celsius için"°C") kullanarak biçimlendirilmiş sonucu yazdırın.
Her metodun parametre türlerini ve dönüş türlerini nasıl açıkça belirttiğine dikkat edin. reset() üzerindeki void dönüş türü, metodun bir değer döndürmeden bir eylem gerçekleştirdiğini açıkça iletir. Bu, kodunuzun sözleşmesini okuyan herkes için net hale getirir.
Kendin dene
<?php
require_once 'TemperatureConverter.php';
// Girdiyi oku
$temperature = floatval(trim(fgets(STDIN)));
$direction = trim(fgets(STDIN));
// TODO: Bir TemperatureConverter örneği oluşturun
// TODO: Yöne göre ("toF" veya "toC"), uygun dönüşümü gerçekleştirin
// - Eğer yön "toF" ise, Fahrenheit'a dönüştürün ve "°F" birimini kullanın
// - Eğer yön "toC" ise, Celsius'a dönüştürün ve "°C" birimini kullanın
// TODO: Doğru birim sembolü ile formatResult() kullanarak biçimlendirilmiş sonucu 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 ServisiKendi başına pratik yap: Online PHP derleyicisi