មេរៀននេះនឹងបង្រៀនអ្នកពី Operators (សញ្ញាគណនា) និង Control Structures (រចនាសម្ព័ន្ធគ្រប់គ្រង)។ រៀនពីមូលដ្ឋានរហូតដល់អាចសរសេរកម្មវិធីដោះស្រាយបញ្ហាតូចៗបាន។
ប្រើសម្រាប់ការគណនាចំនួន៖ បូក (+), ដក (-), គុణ (*), ចែក (/), សំណល់ (%)។
<?php
$a = 15;
$b = 4;
echo "$a + $b = " . ($a + $b); // បូក
echo "\n$a - $b = " . ($a - $b); // ដក
echo "\n$a * $b = " . ($a * $b); // គុណ
echo "\n$a / $b = " . ($a / $b); // ចែក
echo "\n$a % $b = " . ($a % $b); // សំណល់
?>
ប្រើសម្រាប់កំណត់ ឬផ្លាស់ប្ដូរតម្លៃអថេរ៖ =, +=, -=, *=, /=។
<?php
$x = 10; // កំណត់តម្លៃ 10
$x += 5; // $x = $x + 5 → 15
echo "After += 5: $x\n";
$x -= 3; // $x = $x - 3 → 12
echo "After -= 3: $x\n";
$x *= 2; // $x = $x * 2 → 24
echo "After *= 2: $x\n";
$x /= 4; // $x = $x / 4 → 6
echo "After /= 4: $x\n";
?>
ប្រៀបធៀបតម្លៃពីរ ហើយត្រឡប់ true ឬ false។
== ប្រៀបធៀបតម្លៃ, === ប្រៀបធៀបតម្លៃ + ប្រភេទ (type)។
<?php
$a = 5; $b = "5"; $c = 10;
var_dump($a == $b); // true (តម្លៃដូចគ្នា)
var_dump($a === $b); // false (ប្រភេទផ្សេងគ្នា: int vs string)
var_dump($a != $c); // true
var_dump($a !== $b); // true (ផ្សេងប្រភេទ)
var_dump($a > $c); // false
var_dump($a <= $b); // true
?>
&& (AND — ទាំងពីរពិត), || (OR — មួយក្នុងពីរពិត), ! (NOT — បញ្ច្រាស)។
<?php
$age = 20;
$hasID = true;
// AND: ទាំងពីរត្រូវពិត
echo ($age >= 18 && $hasID) ? "អាចចូលបាន" : "មិនអាចចូល";
echo "\n";
// OR: មួយក្នុងពីរពិតក៏គ្រប់គ្រាន់
$isVIP = false;
echo ($isVIP || $age >= 18) ? "អនុញ្ញាត" : "បដិសេធ";
echo "\n";
// NOT: បញ្ច្រាស
$isBanned = false;
echo !$isBanned ? "ស្វាគមន៍" : "អ្នកត្រូវបានហាមឃាត់";
?>
Pre (++$x): បង្កើនមុន រួចប្រើតម្លៃ។ Post ($x++): ប្រើតម្លៃមុន រួចបង្កើន។
<?php
$x = 5;
echo "Start: $x\n";
echo "Post-increment: " . $x++ . "\n"; // បង្ហាញ 5 រួចបង្កើន
echo "After post-increment: $x\n"; // ឥឡូវ 6
$y = 5;
echo "Pre-increment: " . ++$y . "\n"; // បង្កើនមុន → 6
echo "After pre-increment: $y\n"; // នៅ 6
$z = 10;
echo "Pre-decrement: " . --$z . "\n"; // 9
echo "Post-decrement: " . $z-- . "\n"; // បង្ហាញ 9 រួចថយ
echo "Final: $z"; // 8
?>
. ភ្ជាប់ string ពីរ, .= ភ្ជាប់បន្ថែមទៅអថេរដែលមានស្រាប់។ នេះជា operator សំខាន់ក្នុង PHP។
<?php
$firstName = "សុខ";
$lastName = "សាន";
$fullName = $firstName . " " . $lastName;
echo "ឈ្មោះពេញ: " . $fullName . "\n";
// ប្រើ .= បន្ថែម string
$msg = "សួស្ដី";
$msg .= " សិស្សទាំងអស់គ្នា!";
echo $msg;
?>
បញ្ចូលតម្លៃ A និង B រួចជ្រើសរើសប្រភេទ Operator ដើម្បីមើលលទ្ធផល៖
if ពិនិត្យលក្ខខណ្ឌ។ បើពិត → ដំណើរការ Block ។ បើមិនពិត → ទៅ elseif ឬ else។
<?php
$score = 75;
if ($score >= 90) {
echo "Grade A — ពូកែណាស់!";
} elseif ($score >= 80) {
echo "Grade B — ល្អ!";
} elseif ($score >= 60) {
echo "Grade C — មធ្យម។";
} else {
echo "Grade F — ត្រូវខិតខំទៀត។";
}
?>
សេណារីយ៉ូផ្សារ៖ បើទិញច្រើន → បញ្ចុះតម្លៃច្រើន។
<?php
$total = 150; // ដុល្លារ
$discount = 0;
if ($total >= 200) {
$discount = 20; // 20%
} elseif ($total >= 100) {
$discount = 10; // 10%
} elseif ($total >= 50) {
$discount = 5;
} else {
$discount = 0;
}
$final = $total - ($total * $discount / 100);
echo "ទឹកប្រាក់: \${$total} → បញ្ចុះ {$discount}% → សរុប: \${$final}";
?>
ពិនិត្យលក្ខខណ្ឌច្រើនជាន់៖ ពិនិត្យអាយុមុន រួចពិនិត្យអត្តសញ្ញាណប័ណ្ណ។
<?php
$age = 20;
$hasLicense = true;
if ($age >= 18) {
echo "អាយុគ្រប់គ្រាន់។\n";
if ($hasLicense) {
echo "✅ អាចបើកបរបាន!";
} else {
echo "❌ ត្រូវមានប័ណ្ណបើកបរ។";
}
} else {
echo "❌ អាយុមិនគ្រប់ 18 ឆ្នាំ។";
}
?>
ប្រើជំនួស if/elseif ច្រើន។ ចាំ break ដើម្បីបញ្ឈប់! default ដំណើរការបើគ្មាន case ណាត្រូវ។
<?php
$day = "Tuesday";
switch ($day) {
case "Monday":
echo "📅 ថ្ងៃចន្ទ — ចាប់ផ្ដើមសប្ដាហ៍!";
break;
case "Tuesday":
case "Wednesday":
case "Thursday":
echo "📅 $day — ថ្ងៃរៀន។";
break;
case "Friday":
echo "🎉 ថ្ងៃសុក្រ — ជិតចុងសប្ដាហ៍!";
break;
default:
echo "🏖 ចុងសប្ដាហ៍ — សម្រាក!";
break;
}
?>
បញ្ចូល អាយុ និង ពិន្ទុ ដើម្បីមើលលទ្ធផលនៃ if/elseif/else និង nested if៖
ពិនិត្យលក្ខខណ្ឌ មុន ដំណើរការ។ បើ false ពីដំបូង → មិនដំណើរការសោះ។
<?php
$i = 1;
while ($i <= 5) {
echo "រាប់: $i\n";
$i++;
}
?>
ដំណើរការ យ៉ាងហោចម្ដង រួចពិនិត្យលក្ខខណ្ឌ។ ខុសពី while ដែលពិនិត្យមុន។
<?php
$num = 10;
do {
echo "តម្លៃ: $num\n";
$num -= 3;
} while ($num > 0);
echo "បញ្ចប់ — num = $num";
?>
for(init; condition; increment) — ល្អប្រើពេលដឹងចំនួនដង។
<?php
// តារាងគុណ 7
for ($i = 1; $i <= 10; $i++) {
echo "7 x $i = " . (7 * $i) . "\n";
}
?>
<?php
echo "លេខគូពី 2 ដល់ 20:\n";
for ($i = 2; $i <= 20; $i += 2) {
echo "$i ";
}
?>
loop ខាងក្រៅគ្រប់គ្រងជួរ (row), loop ខាងក្នុងគ្រប់គ្រងផ្កាយក្នុងជួរ។
<?php
$rows = 5;
for ($i = 1; $i <= $rows; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo "* ";
}
echo "\n";
}
?>
<?php
for ($i = 1; $i <= 5; $i++) {
for ($j = 1; $j <= 5; $j++) {
printf("%4d", $i * $j);
}
echo "\n";
}
?>
| × | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 1 | 1 | 2 | 3 | 4 | 5 |
| 2 | 2 | 4 | 6 | 8 | 10 |
| 3 | 3 | 6 | 9 | 12 | 15 |
| 4 | 4 | 8 | 12 | 16 | 20 |
| 5 | 5 | 10 | 15 | 20 | 25 |
foreach loop តាមធាតុនីមួយៗក្នុង array។ មិនចាំបាច់ index។
<?php
$fruits = ["ចេក", "ម្នាស់", "ស្វាយ", "ទុរេន", "ល្ហុង"];
foreach ($fruits as $index => $fruit) {
echo ($index + 1) . ". $fruit\n";
}
?>
<?php
$students = [
["name" => "សុខា", "score" => 92, "grade" => "A"],
["name" => "វិចិត្រា", "score" => 78, "grade" => "C"],
["name" => "ដារ៉ា", "score" => 85, "grade" => "B"],
["name" => "ចន្ធី", "score" => 55, "grade" => "F"],
];
echo "<table><tr><th>ឈ្មោះ</th><th>ពិន្ទុ</th><th>Grade</th></tr>";
foreach ($students as $s) {
echo "<tr><td>{$s['name']}</td><td>{$s['score']}</td><td>{$s['grade']}</td></tr>";
}
echo "</table>";
?>
| ឈ្មោះ | ពិន្ទុ | Grade |
|---|---|---|
| សុខា | 92 | A |
| វិចិត្រា | 78 | C |
| ដារ៉ា | 85 | B |
| ចន្ធី | 55 | F |
break — ចេញពី loop ភ្លាម។
continue — រំលងដងបច្ចុប្បន្ន ទៅដងក្រោយ។
<?php
// break: ឈប់ពេលជួប 5
for ($i = 1; $i <= 10; $i++) {
if ($i === 5) break;
echo "$i ";
}
// Output: 1 2 3 4
?>
<?php
// continue: រំលងលេខគូ
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 === 0) continue;
echo "$i ";
}
// Output: 1 3 5 7 9
?>
ជ្រើសរើស ចំនួន (n) និង ប្រភេទ pattern ដើម្បីមើលលទ្ធផល៖
ឧទាហរណ៍ foreach ជាមួយ array ផលិតផល៖
<?php
$products = [
["name" => "ទូរស័ព្ទ Samsung", "price" => 350, "qty" => 12],
["name" => "Laptop Dell", "price" => 780, "qty" => 5],
["name" => "Mouse Logitech", "price" => 25, "qty" => 40],
["name" => "Keyboard Corsair", "price" => 65, "qty" => 18],
["name" => "Monitor LG 27\"", "price" => 290, "qty" => 8],
];
$totalValue = 0;
foreach ($products as $p) {
$subtotal = $p['price'] * $p['qty'];
$totalValue += $subtotal;
echo "{$p['name']} — \${$p['price']} x {$p['qty']} = \$$subtotal\n";
}
echo "\nតម្លៃសរុប: \$$totalValue";
?>
| # | ផលិតផល | តម្លៃ | ចំនួន | សរុប |
|---|---|---|---|---|
| 1 | ទូរស័ព្ទ Samsung | $350 | 12 | $4,200 |
| 2 | Laptop Dell | $780 | 5 | $3,900 |
| 3 | Mouse Logitech | $25 | 40 | $1,000 |
| 4 | Keyboard Corsair | $65 | 18 | $1,170 |
| 5 | Monitor LG 27" | $290 | 8 | $2,320 |
| តម្លៃសរុប: | $12,590 | |||
តើ 17 % 5 ស្មើប៉ុន្មាន? ហើយ 20 % 4 ស្មើប៉ុន្មាន? (ប្រាប់ចម្លើយទាំងពីរ)
💡 Hint: % (modulus) ត្រឡប់សំណល់នៃការចែក។ ឧ: 10 % 3 = 1 ព្រោះ 10 ÷ 3 = 3 សំណល់ 1។
តើអ្វីខុសគ្នារវាង == និង ===? ជ្រើសចម្លើយត្រឹមត្រូវ៖
A) == ប្រៀបធៀបតម្លៃ, === ប្រៀបធៀបតម្លៃ + ប្រភេទ
B) == ប្រៀបធៀបប្រភេទ, === ប្រៀបធៀបតម្លៃ
C) ដូចគ្នា មិនខុស
D) === ប្រើសម្រាប់ string តែប៉ុណ្ណោះ
💡 Hint: សាកល្បង: var_dump(5 == "5") និង var_dump(5 === "5")
តើកូដនេះបង្ហាញអ្វី?$x = 10; $x += 5; $x *= 2; echo $x;
💡 Hint: គណនាម្ដងមួយ៖ 10 + 5 = ? រួចគុណ 2។
តើកូដនេះបង្ហាញអ្វី?$a = 5; echo $a++ . " " . $a;
💡 Hint: Post-increment ($a++) ប្រើតម្លៃចាស់មុន រួចបង្កើន។
សរសេរកូដភ្ជាប់ variable $firstName និង $lastName ជាមួយដកឃ្លា ដោយប្រើ concat operator (.)
💡 Hint: ប្រើ . ដើម្បីភ្ជាប់ string និង " " ជា space។
តើលទ្ធផលអ្វី?$a = true; $b = false; var_dump($a && $b); var_dump($a || $b); var_dump(!$a);
💡 Hint: && ពិតបើទាំងពីរពិត, || ពិតបើមួយពិត, ! បញ្ច្រាស។
សរសេរកូដ if/elseif/else ដើម្បីពិនិត្យសីតុណ្ហភាព ($temp):
≥ 35 → "ក្ដៅខ្លាំង"
≥ 25 → "អាកាសធាតុល្អ"
ផ្សេង → "ត្រជាក់"
💡 Hint: ពិនិត្យពីលក្ខខណ្ឌធំជាងមុន (>= 35 មុន >= 25)។
សរសេរ nested if៖ ពិនិត្យ $age >= 18 មុន → រួចពិនិត្យ $score >= 50 ក្នុង។
បើអាយុគ្រប់ + ពិន្ទុគ្រប់ → "ជាប់"
បើអាយុគ្រប់ + ពិន្ទុមិនគ្រប់ → "ធ្លាក់"
បើអាយុមិនគ្រប់ → "មិនអាចប្រឡង"
💡 Hint: if ខាងក្រៅពិនិត្យអាយុ, if ខាងក្នុងពិនិត្យពិន្ទុ។
សរសេរ switch statement សម្រាប់ $month (1–12):
1–3 → "រដូវប្រាំង"
4–6 → "រដូវក្ដៅ"
7–9 → "រដូវវស្សា"
10–12 → "រដូវស្លឹកឈើជ្រុះ"
default → "មិនត្រឹមត្រូវ"
💡 Hint: ប្រើ case ផ្សំ (case 1: case 2: case 3: ... code ... break;)
តើកូដនេះបង្ហាញអ្វី? (ជ្រើសចម្លើយ)
$x = 15; if ($x > 20) { echo "A"; } elseif ($x > 10) { echo "B"; } elseif ($x > 5) { echo "C"; } else { echo "D"; }
A) A B) B C) C D) D E) BC
💡 Hint: PHP ពិនិត្យពីលើចុះក្រោម ហើយឈប់ពេលជួបលក្ខខណ្ឌពិតដំបូង។
សរសេរ for loop បង្ហាញលេខសេស (odd) ពី 1 ដល់ 15។
💡 Hint: ប្រើ for($i=1; $i<=15; $i+=2) ឬ ប្រើ if($i%2 !== 0)។
សរសេរ while loop បង្ហាញរាប់ថយក្រោយពី 10 ទៅ 1 (countdown)។
💡 Hint: ចាប់ផ្ដើម $i = 10 រួចថយ $i-- រហូតដល់ $i >= 1។
តើ do...while ខុសពី while ដូចម្ដេច? សរសេរ do...while ដែលដំណើរការ ១ ដង ទោះលក្ខខណ្ឌ false។
💡 Hint: do...while ដំណើរការ body មុន រួចពិនិត្យលក្ខខណ្ឌ។
សរសេរ nested for loop បង្កើតត្រីកោណលេខ (n = 4):
1\n1 2\n1 2 3\n1 2 3 4
💡 Hint: loop ខាងក្រៅគ្រប់គ្រងជួរ ($i), loop ខាងក្នុង ($j) រាប់ពី 1 ដល់ $i។
មាន array: $prices = [120, 45, 200, 80, 300, 60];
ប្រើ foreach + if បង្ហាញតែតម្លៃ > 100 ហើយគណនាផលបូកតម្លៃទាំងនោះ។
💡 Hint: ប្រើ foreach loop រួម if($price > 100) ហើយបូកទៅ $total។
សរសេរ for loop ពី 1 ដល់ 20៖
— បើចែក 3 និង 5 ដាច់ → បង្ហាញ "FizzBuzz"
— បើចែក 3 ដាច់ → "Fizz"
— បើចែក 5 ដាច់ → "Buzz"
— បើមិនដាច់ → បង្ហាញលេខ
(ប្រើ continue ដើម្បីរំលងលេខ 13)
💡 Hint: ពិនិត្យ % 15 មុន (FizzBuzz), រួច % 3 (Fizz), រួច % 5 (Buzz)។ ប្រើ continue ពេល $i === 13។
⚠️ សាកល្បងធ្វើដោយខ្លួនឯងមុន! មើលចម្លើយបន្ទាប់ពីព្យាយាមរួច។
Q1 (Operators)
17 % 5 = 2 (ព្រោះ 17 ÷ 5 = 3 សំណល់ 2) 20 % 4 = 0 (ព្រោះ 20 ÷ 4 = 5 គ្មានសំណល់)
Q2 (Operators)
ចម្លើយ: A == ប្រៀបធៀបតម្លៃ (5 == "5" → true) === ប្រៀបធៀបតម្លៃ + ប្រភេទ (5 === "5" → false ព្រោះ int ≠ string)
Q3 (Operators)
ចម្លើយ: 30 $x = 10 $x += 5 → $x = 15 $x *= 2 → $x = 30
Q4 (Operators)
ចម្លើយ: 5 6 $a++ ប្រើតម្លៃ 5 មុន រួចបង្កើនទៅ 6 echo ទី 2 បង្ហាញ 6
Q5 (Operators)
$fullName = $firstName . " " . $lastName; echo $fullName; // ឧ: សុខ សាន
Q6 (Operators)
bool(false) — true && false = false bool(true) — true || false = true bool(false) — !true = false
Q7 (Conditionals)
$temp = 30;
if ($temp >= 35) {
echo "ក្ដៅខ្លាំង";
} elseif ($temp >= 25) {
echo "អាកាសធាតុល្អ";
} else {
echo "ត្រជាក់";
}
// Output: អាកាសធាតុល្អ
Q8 (Conditionals)
if ($age >= 18) {
if ($score >= 50) {
echo "ជាប់";
} else {
echo "ធ្លាក់";
}
} else {
echo "មិនអាចប្រឡង";
}
Q9 (Conditionals)
switch ($month) {
case 1: case 2: case 3:
echo "រដូវប្រាំង"; break;
case 4: case 5: case 6:
echo "រដូវក្ដៅ"; break;
case 7: case 8: case 9:
echo "រដូវវស្សា"; break;
case 10: case 11: case 12:
echo "រដូវស្លឹកឈើជ្រុះ"; break;
default:
echo "មិនត្រឹមត្រូវ";
}
Q10 (Conditionals)
ចម្លើយ: B $x = 15 → 15 > 20? false → 15 > 10? true → echo "B" រួចឈប់។ មិនបន្តទៅ elseif ក្រោយទៀតទេ។
Q11 (Loops)
for ($i = 1; $i <= 15; $i += 2) {
echo "$i ";
}
// Output: 1 3 5 7 9 11 13 15
Q12 (Loops)
$i = 10;
while ($i >= 1) {
echo "$i ";
$i--;
}
// Output: 10 9 8 7 6 5 4 3 2 1
Q13 (Loops)
// while: ពិនិត្យមុន → អាចមិនដំណើរការសោះ
// do...while: ដំណើរការមុន → យ៉ាងហោចម្ដង
$x = 100;
do {
echo "នេះដំណើរការម្ដង!";
} while ($x < 5);
// Output: នេះដំណើរការម្ដង!
// (ទោះ 100 < 5 ជា false ក៏ execute ម្ដង)
Q14 (Loops)
for ($i = 1; $i <= 4; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo "$j ";
}
echo "\n";
}
Q15 (Loops)
$prices = [120, 45, 200, 80, 300, 60];
$total = 0;
foreach ($prices as $price) {
if ($price > 100) {
echo "$price ";
$total += $price;
}
}
echo "\nសរុប: $total";
// Output: 120 200 300
// សរុប: 620
Q16 (Loops)
for ($i = 1; $i <= 20; $i++) {
if ($i === 13) continue; // រំលង 13
if ($i % 15 === 0) {
echo "FizzBuzz ";
} elseif ($i % 3 === 0) {
echo "Fizz ";
} elseif ($i % 5 === 0) {
echo "Buzz ";
} else {
echo "$i ";
}
}
// 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 14 FizzBuzz 16 17 Fizz 19 Buzz