# 1.9 PHP'de Sabitler

## **`define` Fonksiyonu Kullanımı:**

PHP'de bir sabit oluşturmak için `define` fonksiyonunu kullanabilirsiniz. `define` fonksiyonu üç parametre alır:

```php
define(name, value, case-insensitive);
```

1. **name**: Sabitin adını belirtir.
2. **value**: Sabitin değerini belirtir.
3. **case-insensitive**: Sabit adının büyük/küçük harfe duyarlı olup olmayacağını belirtir. PHP 8.0 itibariyle bu parametre her zaman `false` olmalıdır.

**Büyük/küçük harfe duyarlı** bir ada sahip bir sabit oluşturun:

```php
define("GREETING", "Welcome to Yavuzlar");
echo GREETING;
```

**Büyük/küçük harfe duyarlı olmayan** bir ada sahip bir sabit oluşturun:

```php
define("GREETING", "Welcome to Yavuzlar", true);
echo greeting;
```

**`const` Anahtar Kelimesi ile Sabit Tanımlama:**

```php
const MYCAR = "Volvo";
echo MYCAR;
```

## **`const` ve `define()` karşılaştırması**

* `const` her zaman büyük/küçük harfe duyarlıdır
* `define()` büyük/küçük harfe duyarlı olmayan bir seçeneğe sahiptir.
* `const` Başka bir blok kapsamı içinde (örneğin bir fonksiyon içinde veya bir `if` bloğunun içinde) oluşturulamaz.
* `define` başka bir blok kapsamı içinde oluşturulabilir.

## **Sihirli Sabitler**

PHP'deki sihirli sabitler (magic constants), belirli durumlarda özel değerler döndüren sabitlerdir. Bu sabitler, dosya yolları, sınıf isimleri, fonksiyon isimleri gibi bilgileri döndürmek için kullanılır ve hata ayıklama veya bilgi toplama gibi amaçlar için oldukça yararlıdır.

**Sihirli Sabitler ve Açıklamaları**

1. **`__CLASS__`**: Bir sınıf içinde kullanıldığında, sınıfın adını döner.

```php
<?php
class MyClass {
    public function getClassName() {
        return __CLASS__;
    }
}

$obj = new MyClass();
echo $obj->getClassName(); // Çıktı: MyClass
?>
```

2. **`__DIR__`**: Dosyanın bulunduğu dizini döner.

```php
<?php
echo __DIR__; // Çıktı: dosyanın bulunduğu dizinin tam yolu
?>
```

3. **`__FILE__`**: Dosyanın tam yolunu döner.

```php
<?php
echo __FILE__; // Çıktı: dosyanın tam yolu ve adı
?>
```

4. **`__FUNCTION__`**: Bir fonksiyon içinde kullanıldığında, fonksiyonun adını döner.

```php
<?php
function myFunction() {
    return __FUNCTION__;
}

echo myFunction(); // Çıktı: myFunction
?>
```

5. **`__LINE__`**: Geçerli satır numarasını döner.

```php
<?php
echo "Bu kod satırı " . __LINE__ . " satırındadır."; //Çıktı: Bu kod satırı 3 satırındadır.
?>
```

6. **`__METHOD__`**: Bir sınıfa ait bir fonksiyon içinde kullanıldığında, hem sınıf hem de fonksiyon adını döner.

```php
<?php
class MyClass {
    public function myMethod() {
        return __METHOD__;
    }
}

$obj = new MyClass();
echo $obj->myMethod(); // Çıktı: MyClass::myMethod
?>
```

7. **`__NAMESPACE__`**: Bir isim alanı içinde kullanıldığında, isim alanının adını döner.

```php
<?php
namespace MyNamespace;

echo __NAMESPACE__; // Çıktı: MyNamespace
?>
```

8. **`__TRAIT__`**: Bir trait içinde kullanıldığında, trait adını döner.

```php
<?php
trait MyTrait {
    public function getTraitName() {
        return __TRAIT__;
    }
}

class MyClass {
    use MyTrait;
}

$obj = new MyClass();
echo $obj->getTraitName(); // Çıktı: MyTrait
?>
```

9. **`ClassName::class`**: Belirtilen sınıfın adını ve varsa isim alanının adını döner.

```php
<?php
namespace MyNamespace;

class MyClass {}

echo MyNamespace\MyClass::class; // Çıktı: MyNamespace\MyClass
?>
```

> \[!NOTE]
>
> Sihirli sabitler büyük/küçük harfe duyarlı değildir, yani ile aynı değeri döndürür. `__LINE__` = `__line__`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.yavuzlar.org/egitim/00x0-php-nedir/00x9-phpde-sabitler.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
