Sınıflarda Sabitler
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 16 / 91.
Bazen bir sınıfta asla değişmemesi gereken değerlere ihtiyaç duyarsınız. Sınıf sabitleri, tüm örneklerde aynı kalan ve bildirildikten sonra değiştirilemeyen sabit değerleri tanımlamanın bir yolunu sunar.
Bir sınıfın içinde const anahtar sözcüğünü kullanarak bir sabit tanımlarsın. Geleneksel olarak sabit adları büyük harflerle yazılır:
<?php
class Circle {
const PI = 3.14159;
public $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function area() {
return self::PI * $this->radius * $this->radius;
}
}
$circle = new Circle(5);
echo $circle->area();
Çıktı:
78.53975Statik özellikler gibi, sabitler de tek tek nesneler yerine sınıfa aittir. Bunlara sınıfın içinde self::CONSTANT_NAME veya dışarıdan ClassName::CONSTANT_NAME kullanarak erişirsiniz:
<?php
class HttpStatus {
const OK = 200;
const NOT_FOUND = 404;
const SERVER_ERROR = 500;
}
echo HttpStatus::OK . "\n";
echo HttpStatus::NOT_FOUND;
Çıktı:
200
404Önemli Nokta: Statik özelliklerin aksine, sabitler tanımlandıktan sonra değiştirilemez. Yapılandırma değerleri, durum kodları veya matematiksel sabitler gibi uygulamanız boyunca sabit kalması gereken değerler için idealdir.
Görev
KolayHiç değişmeyen sabit dönüşüm değerlerini depolamak için sınıf sabitlerini kullanan bir sıcaklık dönüştürme yardımcı programı oluşturalım.
Kodunu düzenlemek için iki dosya oluşturacaksın:
Temperature.php: Sıcaklık dönüşümlerini yöneten birTemperaturesınıfı tanımla. Sınıfta üç sabit bulunmalı:FREEZING_POINT_Cdeğeri0,BOILING_POINT_Cdeğeri100veCONVERSION_FACTORdeğeri1.8olarak ayarlanmalı (Santigrat'tan Fahrenheit'a dönüşüm için kullanılır). Birpublic $celsiusözelliği ve Santigrat değerini kabul edip ayarlayan bir yapıcı ekle. Saklanan Santigrat sıcaklığını şu formülü kullanarak Fahrenheit'a dönüştüren birtoFahrenheit()yöntemi ekle:(celsius * CONVERSION_FACTOR) + 32. Ayrıca sıcaklık donma noktası sabitine eşitse"Freezing", kaynama noktası sabitine eşitse"Boiling", aksi hâlde"Normal"döndüren birgetStatus()yöntemi ekle.main.php: Temperature sınıfı dosyasını dahil et.0,100ve25değerleriyle üç Temperature nesnesi oluştur. Her sıcaklık için Fahrenheit dönüşümünü ve ardından durumu aynı satırda şu biçimde yazdır:"[fahrenheit]F - [status]". Her sıcaklık kendi satırında olmalı. Üçünü de yazdırdıktan sonraBOILING_POINT_Csabitine doğrudan sınıftan (Temperature::BOILING_POINT_Ckullanarak) eriş ve bunu yeni bir satırda yazdır.
Sınıf içinde sabitlere self::CONSTANT_NAME kullanılarak, dışarıdan ise ClassName::CONSTANT_NAME kullanılarak erişildiğini unutma. Özelliklerin aksine, sabitlere erişirken $ sembolü kullanılmaz.
Kendin dene
<?php
require_once 'Temperature.php';
// TODO: 0, 100 ve 25 değerleriyle üç Temperature nesnesi oluştur
// TODO: Her sıcaklık için şu formatta yazdır: "[fahrenheit]F - [status]"
// Her sıcaklık kendi satırında
// TODO: BOILING_POINT_C sabitine sınıftan doğrudan eriş ve yazdır
// ClassName::CONSTANT_NAME sözdizimini kullan
?>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 SözcüğüMetotlarÖzelliklerYapıcı (__construct)Yıkıcı (__destruct)Tekrar - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar SözcüğüMetot Geçersiz Kılmafinal Anahtar SözcüğüSoyut SınıflarTekrar - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicileri DerinlemesineGetter ve Setter'larBilgi GizlemeYapıcı Özellik Terfisi (8.0)Tekrar - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Composition ve KalıtımBağımlılık EnjeksiyonuAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlamaya Derinlemesine BakışÜreteçler ve Yineleyiciler13Tasarı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ıBileşik KalıpDepo Kalıbı2Namespace’ler ve Autoloading
Namespace’lere Girişuse Anahtar SözcüğüPSR-4 Autoloading StandardıComposer AutoloaderTekrar - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Çok Arayüz UygulamaArayüz ve Soyut Sınıf KarşılaştırmasıArayüzlerle Tür İpuçlarıTekrar - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString ve __debugInfo__get, __set, __isset, __unset__call ve __callStatic__clone ve Nesne Klonlama__serialize ve __unserializeTekrar - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerSalt Okunur Özellikler (PHP 8.1)Tekrar - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmayı Yeniden Ele AlmaArayüzler Yoluyla Çok BiçimlilikTür İpuçları ve Birleşim TürleriGeç Bağlanan Statik ÇağrılarÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişBirden Çok Trait KullanımıTrait Çakışmalarını ÇözümlemeTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım Karşılaştırması12Tasarım Desenleri 1. Bölüm
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online PHP derleyicisi