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 hiç değişmemesi gereken değerlere ihtiyaç duyarsınız. Sınıf sabitleri (Class constants), tüm örneklerde aynı kalan ve tanımlandıktan sonra değiştirilemeyen sabit değerler tanımlamanın bir yolunu sunar.
Bir sınıf içinde const anahtar kelimesini kullanarak bir sabit tanımlarsınız. Geleneksel olarak, sabit isimleri büyük harfle 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 bireysel nesnelerden ziyade sınıfa aittir. Bunlara sınıf içinden 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 (constants) bir kez tanımlandıktan sonra değiştirilemezler. Yapılandırma değerleri, durum kodları veya matematiksel sabitler gibi uygulamanız boyunca sabit kalması gereken değerler için idealdirler.
Görev
KolayAsla değişmeyen sabit dönüşüm değerlerini saklamak için sınıf sabitlerini (class constants) kullanan bir sıcaklık dönüşüm aracı oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
Temperature.php— Sıcaklık dönüşümlerini işleyen birTemperaturesınıfı tanımlayın. Sınıfın üç sabiti olmalıdır:0değerine ayarlanmışFREEZING_POINT_C,100değerine ayarlanmışBOILING_POINT_Cve1.8değerine ayarlanmışCONVERSION_FACTOR(Celsius'tan Fahrenheit'a dönüşüm için kullanılır). Birpublic $celsiusözelliği ve Celsius değerini kabul edip atayan bir yapıcı (constructor) ekleyin. Saklanan Celsius sıcaklığını şu formülü kullanarak Fahrenheit'a dönüştüren birtoFahrenheit()metodu ekleyin:(celsius * CONVERSION_FACTOR) + 32. Ayrıca, sıcaklık donma noktası sabitine eşitse"Freezing", kaynama noktası sabitine eşitse"Boiling", aksi takdirde"Normal"döndüren birgetStatus()metodu ekleyin.main.php— Temperature sınıf dosyasını dahil edin.0,100ve25değerlerine sahip üç Temperature nesnesi oluşturun. Her sıcaklık için, Fahrenheit dönüşümünü ve ardından durumu aynı satırda şu formatta yazdırın:"[fahrenheit]F - [status]". Her sıcaklık kendi satırında olmalıdır. Üçünü de yazdırdıktan sonra,BOILING_POINT_Csabitine doğrudan sınıftan erişin (Temperature::BOILING_POINT_Ckullanarak) ve yeni bir satıra yazdırın.
Sabitlere sınıf içinden self::CONSTANT_NAME, dışından ise ClassName::CONSTANT_NAME kullanılarak erişildiğini unutmayın. Özelliklerin aksine, sabitlere erişirken $ sembolü kullanılmaz.
Kopya kağıdı
Sınıf sabitleri (class constants), asla değişmeyen ve bir sınıfın tüm örnekleri arasında paylaşılan sabit değerlerdir. Bunları const anahtar kelimesini kullanarak tanımlayın:
<?php
class Circle {
const PI = 3.14159;
public function area($radius) {
return self::PI * $radius * $radius;
}
}
Sınıf içinden sabitlere self::CONSTANT_NAME kullanarak erişin:
return self::PI * $radius * $radius;
Sınıf dışından sabitlere ClassName::CONSTANT_NAME kullanarak erişin:
echo Circle::PI;
Statik özelliklerden temel farkları:
- Sabitler tanımlandıktan sonra değiştirilemezler
- Sabitler
$sembolünü kullanmazlar - Sabitler; yapılandırma ayarları, durum kodları veya matematiksel sabitler gibi değişmeyen değerler için idealdir
Geleneksel olarak, sabit isimleri büyük harfle yazılır:
<?php
class HttpStatus {
const OK = 200;
const NOT_FOUND = 404;
const SERVER_ERROR = 500;
}
echo HttpStatus::OK; // 200
Kendin dene
<?php
require_once 'Temperature.php';
// TODO: 0, 100 ve 25 değerlerine sahip üç Temperature nesnesi oluşturun
// TODO: Her sıcaklık için şu formatta yazdırın: "[fahrenheit]F - [durum]"
// Her sıcaklık kendi satırında olmalı
// TODO: BOILING_POINT_C sabitine doğrudan sınıf üzerinden erişin ve yazdırın
// ClassName::CONSTANT_NAME sözdizimini kullanı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 Koleksiyon3Sı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