PHP là một ngôn ngữ lập trình phổ biến với nhiều tính năng mạnh mẽ, nhưng đôi khi có những logic khó đoán và dễ gây nhầm lẫn. Trong bài viết này, chúng ta sẽ cùng khám phá một số câu hỏi phỏng vấn PHP phức tạp và giải thích chi tiết.

1. Kết quả của đoạn code sau là gì?

php
$array = [1 => "a", "1" => "b", 1.5 => "c", true => "d"];
echo $array[1];

Trả lời:

d

Giải thích:

  • PHP chuyển đổi các key về integer nếu chúng là số.
  • Key 1.5 bị chuyển thành 1.
  • true cũng bị chuyển thành 1, nên ghi đè giá trị trước đó.

2. Kết quả của đoạn code này là gì?

php
$x = true and false;
var_dump($x);

Trả lời:

bool(true)

Giải thích:

  • Toán tử and có độ ưu tiên thấp hơn =.
  • x = true được gán trước, sau đó and false không ảnh hưởng.

3. Kết quả của đoạn code này là gì?

php
$array = array(1, 2, 3, 4, 5);
$array = array_map(function($value) {
    return $value * 2;
}, $array);
echo implode(", ", $array);

Trả lời:

2, 4, 6, 8, 10

Giải thích:

  • array_map nhân từng phần tử trong mảng với 2.

4. Kết quả của đoạn code sau là gì?

php
$number = 3;
echo $number;
echo $number++ + $number++;
echo $number;
echo $number-- - $number--;
echo $number;

Trả lời:

37513

Giải thích:

  • Toán tử hậu tố ++-- trả về giá trị trước khi tăng/giảm.

5. Kết quả của đoạn code sau là gì?

php
$array = [1, 2, 3, 4, 5];
unset($array[2]);
$result = array_values($array);
echo implode(", ", $result);

Trả lời:

1, 2, 4, 5

Giải thích:

  • unset($array[2]) xóa phần tử nhưng không cập nhật index.
  • array_values tạo mảng mới với index liên tiếp.

6. Kết quả của đoạn code sau là gì?

php
$person = 'John ';
$person[10] = 'Smith';
echo $person;

Trả lời:

shell
John      S

Giải thích:

  • PHP mở rộng chuỗi để chứa phần tử thứ 10 và điền khoảng trắng.

7. Kết quả của đoạn code sau là gì?

php
$array = ['a' => 'apple', 'b' => 'banana', 'c' => 'cherry'];
unset($array['b']);
$result = array_keys($array);
echo implode(", ", $result);

Trả lời:

a, c

Giải thích:

  • unset($array['b']) xóa key 'b' mà không thay đổi các key khác.

8. Kết quả của đoạn code sau là gì?

php
$array = [1, 2, 3, 4, 5];
foreach ($array as &$value) {
    $value *= 2;
}
unset($value);
$result = array_map(function($v) { return $v - 1; }, $array);
echo implode(", ", $result);

Trả lời:

1, 3, 5, 7, 9

Giải thích:

  • Biến $value là tham chiếu đến phần tử của mảng.
  • Nếu không unset($value), biến này có thể ảnh hưởng đến giá trị tiếp theo ngoài vòng lặp.
  • array_map trừ mỗi phần tử đi 1.

9. Kết quả của đoạn code sau là gì?

php
$count = 7;
while (--$count > 0) {
    $count++;
    echo $count;
    echo "hello";
}

Trả lời:

Vòng lặp vô hạn.

Giải thích:

  • --$count giảm $count trước khi kiểm tra điều kiện.
  • count++ tăng lại giá trị $count, khiến $count không bao giờ xuống 0.
  • Dẫn đến vòng lặp chạy vô hạn.

Kết Luận

Những câu hỏi trên minh hoạ và giải thích những trường hợp thú vị trong PHP. Việc hiểu rõ những trường hợp này sẽ giúp bạn tránh những lỗi sai và viết code tốt hơn!