# কন্সট্যান্টস, এক্সপ্রেশনস ও অপারেটরস

## অপরিবর্তনশীল কন্সট্যান্টস

কন্সট্যান্ট এর নাম শুনেই বোঝা যাচ্ছে এর কাজই হলো পরিবর্তন না হওয়া । কনস্ট্যান্ট হিসেবে আমরা খুব সিম্পল ভ্যালু সংরক্ষণ করতে পারি । `define` ব্যবহার করে আমরা কন্সট্যান্ট তৈরি করি ।

```php
<?php
define("FOO",     "something");
define("FOO2",    "something else");
define("FOO_BAR", "something more");
```

কন্সট্যান্ট এর নাম সাধারনত বড় হাতের লেখা হয় । নামকরণের ক্ষেত্রে ভ্যারিয়েবলের মতই শুরুতে সংখ্যা ব্যবহার করা যায় না, নামটি কেইস সেনসিটিভ ।

## এক্সপ্রেশনস

পিএইচপির খুব গুরুত্বেপূর্ণ একটি বিষয় হচ্ছে এক্সপ্রেশন । পিএইচপিতে আমরা মোটামোটি যাই লিখি তার সবই এক্সপ্রেশন । একটি এক্সপ্রেশন এর সবসময়ই একটি ভ্যালু থাকে ।

আমরা যখন একটি ভ্যারিয়েবল কিংবা কন্সট্যান্ট ডিফাইন করি তখন কিন্তু আমরা একটি এক্সপ্রেশন ব্যবহার করছি । যেমন:

```php
<?php
$name = "masnun";
```

এখানে আমরা `$name` ভ্যারিয়েবল এ `masnun` স্ট্রিংটি এ্যাসাইন করেছি । এখানে এই `"masnun"` অংশটুকু হলো একটি এক্সপ্রেশন যার ভ্যালু হলো স্ট্রিং `masnun` ।

আবার যখন এই ভ্যারিয়েবলটিকেই পুনরায় আরেকটি ভ্যারিয়েবল এ এ্যাসাইন করছি তখন:

```php
<?php

$nickname = $name;
```

এখানে কিন্তু `$name` অংশটুকু একটি এক্সপ্রেশন যার ভ্যালু হচ্ছে `masnun` । এখানে আমরা `$nickname` এর ভ্যালু হিসেবে `$name` এক্সপ্রেশনের ভ্যালুকে এ্যাসাইন করেছি ।

এক্সপ্রেশনের ব্যাসিকটা বুঝে নেওয়া জরুরী কেননা পিএইচপি এক্সপ্রেশন ভিত্তিক ল্যাঙ্গুয়েজ, পিএইচপিতে নানা ধরণের জটিল জটিল এক্সপ্রেশন ব্যবহার করে পরবর্তীতে আমাদের নানা সমস্যার সমাধান করা লাগবে ।

## অপারেটরস

অপারেটর এক বা একাধিক ভ্যালু কিংবা এক্সপ্রেশনের সম্মিলন ঘটিয়ে একটি নতুন ভ্যালু তৈরি করে । যেমন:

```php
<?php
$a = 23;
$b = 5; 

$sum = $a + $b + 2;
```

এখানে শেষ লাইনে এসে তিনটি ভিন্ন এক্সপ্রেশন এর সমন্বয়ে আমরা নতুন একটি ভ্যালু পাচ্ছি । `$a + $b + 2` এটি নিজেও কিন্তু একটি এক্সপ্রেশন । সুতরাং আমরা এভাবেও বলতে পারি, অপারেটরের কাজ হচ্ছে একাধিক এক্সপ্রেশনের সমন্বয়ে নতুন একটি বৃহদাকার এক্সপ্রেশন তৈরি করা ।

### অপারেটর প্রিসিডেন্স

শুরুতেই আসুন একটি সহজ অঙ্ক করি:

```
30 - 4 * 30 / 5 +  4
```

বলুনতো এটার ফল কেন `10` হবে? কারণ আমরা জানি এখানে সবার আগে ভাগ এবং গুন এর কাজ করতে হবে এরপর যোগ বিয়োগ । এটাই গনিতের নিয়ম, এখানে এই যে আমরা ভাগ এবং গুনকে অগ্রাধিকার দিলাম, এটাই অপারেটর প্রিসিডেন্স । যখন পিএইচপিতে একাধিক এক্সপ্রেশনের মধ্যে আমরা এমন করে অপারেটর ব্যবহার করি তখন কোন কোন অপারেটর অগ্রাধিকার পায় - তাই সঠিক ফলাফল পেতে আমাদেরকে অপারেটর প্রিসিডেন্স সম্পর্কে বিস্তারিত জানতে হবে ।

অপারেটর প্রিসিডেন্স সম্পর্কে আরো বিস্তারিত জানতে পিএইচপি ম্যানুয়ালের এই চ্যাপ্টারটি দ্রষ্টব্য - <http://php.net/manual/en/language.operators.precedence.php> - পরবর্তীতে এই কন্টেন্টও বাংলায় বিশদভাবে ব্যখ্যা করে লেখার ইচ্ছা আছে ।

### কমন অপারেটরস

গানিতিক অপারেটরগুলো আমরা সবাই কমবেশী চিনি:

```php
<?php
$a = -$a; // মান ঋনাত্বক করা হলো
$sum = 2 + 3; // যোগ 
$sub = 6 - 3; // বিয়োগ
$mul = 5 * 6; // গুন
$div = 24 / 3; // ভাগ
$mod = 13 % 2; // ১৩ কে ২ দিয়ে ভাগ করলে ভাগশেষ ১
$exp = 2 ** 3; // ২ টু দি পাওয়ার ৩ = ৮
```

এ্যাসাইনমেন্ট অপারেটর (`=`) এর সাথে আমরা ইতোমধ্যে পরিচিত হয়েছি, এটার মাধ্যমে আমরা ভ্যালু এ্যাসাইন করি ।

```php
<?php
$a = ($b = 4) + 5;
```

এখন `$b` এর মান `4` এবং `$a` এর মান হবে `9` । অবজেক্ট টাইপ ব্যতিত প্রায় সকল টাইপের ক্ষেত্রেই এ্যাসাইনমেন্ট অপারেটর ডান পাশের এক্সপ্রেশনের ভ্যালু কপি করে, তাই মূল এক্সপ্রেশনে ব্যবহৃত ভ্যারিয়েবলগুলোর ভ্যালু পরিবর্তন হয় না । তবে আমরা যদি একই চাই যে দুটি ভ্যারিয়েবল ই একই মেমরী ব্লক তথা একই ডাটাকে নির্দেশ করুক সেক্ষেত্রে আমরা একটা `&` যোগ করে দিতে পারি নিচের মত করে:

```php
<?php

$a = 3;
$b = &$a;

$a = 5; 
echo $b; // এটার মানও পরিবর্তন হয়ে 5 হবে
```

এটাকে এ্যসাইনমেন্ট বাই রেফারেন্স বলা হয় ।

কম্প্যারিজন অপারেটরগুলো দুটো এক্সপ্রেশনের ভ্যালু কম্পেয়ার করার জন্য ব্যবহার করা হয় । যেমন:

```php
<?php

$a == $b; // TRUE হবে যদি $a আর $b এর ভ্যালু টাইপ কনভার্শনের পর একই হয় 
$a === $b; // TRUE হবে যদি $a এবং $b এর ভ্যালু একই এবং এরা একই টাইপের হয়
$a != $b; // TRUE যদি টাইপ কনভার্শনের পর ভ্যালু একই না হয়
$a <> $b; // TRUE যদি টাইপ কনভার্শনের পর ভ্যালু একই না হয়
$a !== $b; // TRUE যদি টাইপ কনভার্শনের পর ভ্যালু একই না হয় অথবা তারা একই টাইপ না হয়
$a < $b; // TRUE যদি $a, $b থেকে ছোট হয়
$a > $b; // TRUE যদি $a, $b থেকে বড় হয়
$a <= $b; // TRUE যদি $a, $b এর সমান অথবা $b থেকে ছোট হয়
$a >= $b; // TRUE যদি $a, $b এর সমান অথবা $b থেকে বড় হয়
```

মনে রাখতে হবে, যদি আমরা স্ট্রিং এর সাথে নাম্বার কম্পেয়ার করি তবে পিএইচপি অটোমেটিক্যালি স্ট্রিংকে নাম্বারে কনভার্ট করবে । এরপর দুই নাম্বার ভ্যালু কম্পেয়ার করবে । তবে `===` বা `!==` এর বেলায়, যেখানে টাইপ সহ কম্পেয়ার করা হয় - এসব ক্ষেত্রে টাইপ কনভার্শন অটোমেটিক্যালি হয় না ।

ইনক্রিমেন্টাল ও ডিক্রিমেন্টাল অপারেটরস:

```php
<?php
++$a // আগে $a এর ভ্যালু এক বাড়িয়ে তারপর $a এর ভ্যালু রিটার্ন করে 
$a++ // আগে $a এর ভ্যালু রিটার্ন করে তারপর $a এর ভ্যালু এক বাড়িয়ে দেয় 

--$a // ‌আগে $a এর ভ্যালু এক কমিয়ে নেয় তারপর $a এর ভ্যালু রিটার্ন করে 
$a-- // আগে $a এর ভ্যালু রিটার্ন করে তারপর $a এর ভ্যালু এক কমিয়ে দেয়
```

লজিকাল অপারেটরস:

```php
<?php
$a and $b // TRUE যদি দুটোই TRUE হয়
$a or $b // TRUE যদি যে কোন একটা TRUE হয়
$a xor $b // TRUE যদি যে কোন একটা TRUE হয় কিন্তু দুটোই TRUE না হয়
!$a // TRUE যদি $a TRUE না হয়
$a && $b // TRUE যদি দুটোই TRUE হয়
$a || $b // TRUE যদি যে কোন একটা TRUE হয়
```

নোট: `and`, `or` এবং `||`, `&&` একই কাজ করলেও এদের অগ্রাধিকার ভিন্ন । যেটা আমরা অপারটের প্রিসিডেন্স টেবিলে বিস্তারিত দেখতে পাবো ।

এছাড়া আমরা দুটো স্ট্রিং কে সংযুক্ত করতে `.` অপারেটর ব্যবহার করি । যেমন:

```php
<?php
$a = "Hello ";
$b = $a . "World!"; // এখন $b এর ভ্যালু হবে "Hello World!"
```


---

# 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://php.howtocode.dev/constants-expressions-operators.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.
