Menu
Coddy logo textTech

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.53975

Statik ö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.

challenge icon

Görev

Kolay

Asla 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 bir Temperature sınıfı tanımlayın. Sınıfın üç sabiti olmalıdır: 0 değerine ayarlanmış FREEZING_POINT_C, 100 değerine ayarlanmış BOILING_POINT_C ve 1.8 değerine ayarlanmış CONVERSION_FACTOR (Celsius'tan Fahrenheit'a dönüşüm için kullanılır). Bir public $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 bir toFahrenheit() 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 bir getStatus() metodu ekleyin.
  • main.php — Temperature sınıf dosyasını dahil edin. 0, 100 ve 25 değ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_C sabitine doğrudan sınıftan erişin (Temperature::BOILING_POINT_C kullanarak) 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

?>
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