Bộ câu hỏi phỏng vấn PHP phần 1

Hằng trong PHP khác gì so với biến? Nếu 1 hằng được định nghĩa 2 lần, thì liệu có bị lỗi không?

Hằng và biến trong PHP là khái niệm khác nhau:

  • Đầu tiên khác nhau là cách khai báo:
  • Biến thì chỉ cần dùng ký tự $ để gắn hoặc lấy giá trị.
  • Hằng dùng hàm define() gắn giá trị và dùng constant() để lấy giá trị.
  • Điểm khác biệt lớn nhất là hằng là không thể thay đổi trong suốt quá trình chạy chương trình, biến thì có. Nêu 1 hằng được định nghĩa 2 lần thì chương trình vẫn chạy được bình thường tuy nhiên hằng chỉ có giá trị của lần định nghĩa đầu tiên.

Phân biệt $\_POST và $\_GET trong php?

  • Cả $\_GET$\_POST đều được dùng để gửi dữ liệu lên server.
  • $\_GET: Gửi dữ liệu lên server thông qua URL, nên thông tin dữ liệu hiển thị lên url vì thế bảo mật kém, dữ liệu gửi lên bị giới hạn 1024 ký tự.
  • $\_POST: Gửi dữ liệu lên server dưới dạng ẩn thông qua HTTP Header vì thế nó có tính bảo mật cao hơn so với GET, dữ liệu gửi lên không bị giới hạn.
  • Tuy nhiên tốc độ thực thi xử lý của Post chậm hơn Get.

Mảng là gì? Có mấy loại mảng trong PHP?

Mảng là một biến có thể chứa được nhiều phần tử, từ đó ta có thể dễ dàng lưu trữ, xắp xếp, hay xóa bỏ các phần tử trong mảng một cách dễ dàng. Mảng bao gồm 2 thành phần là KEYVALUE, key dùng để truy cập vào phần tử của mảng qua đó ta có thể gán giá trị hoặc lấy giá trị của các phần tử trong mảng. Mảng(array) có 3 loại chính là:

  • Mảng tuần tự: là mảng có key tự động tạo là chữ số tăng dần bắt đầu từ 0.
  • Mảng không tuần tự: là mảng có key mà bạn phải tự định nghĩa bằng các ký tự chữ hoặc số, và key không được sắp xếp bất kỳ thứ tự nào.
  • Mảng đa chiều: là mảng có chứa ít nhất một mảng khác trong nó.

Mảng tuần tự là gì? Khác gì với bất tuần tự? Để duyệt mảng ta dùng vòng lặp nào?

Mảng tuần tự là mảng có key là chữ số bắt đầu từ 0 và tăng dần. Nó khác với mảng bất tuần tự là các phần tử trong nó KEY được sắp xếp tăng dần từ 0 còn mảng bất từ tự thì không. Để duyệt mảng tả có thể dùng bất cứ vùng lập nào? Tuy nhiên chuẩn nhất là dùng vòng lập foreach, vì vòng lập này được nhà phát triển PHP xây dựng riêng cho việc duyệt mảng, nêu nó dễ sử dụng hơn, tốc độ xử lý của nó nhanh hơn.

Để chuyển mảng thành chuỗi ta dùng hàm gì? Để tách chuỗi thành mảng ta dùng hàm gì?

Trong PHP cung cấp hàm implode(separator,array) dùng để chuyển mảng thành một chuỗi và hàm explode(separator,string,[limit]) dùng để chuyển một chuỗi thành mảng. Ngoài ra ta có hàm join($ky_tu,$array) giống hàm implode

Trong PHP để gộp mảng ta dùng hàm gì? Để tách mảng ta dùng hàm gì?

Trong PHP cung cấp hàm array_merge($array1, $array2, $array3,…) dùng để nối các mảng thành một mảng duy nhất và hàm array_slice(array,start,[length],[preserve]) dùng để tách mảng thành một mảng nhỏ hơn.

Cho biết sự khác nhau giữa serialize và json_encode? Lý giải theo cách bạn hiểu?

  • json_encode: là phương thức dùng để chuyển đổi một mảng(Array) hoặc Object thành string(chuỗi) dữ liệu JSON để sử dụng khi lưu trữ trong database, và để chuyển đổi ngược lại ta dùng json_decode để chuyển đổi một chuỗi dữ liệu JSON sang dạng mảng(Array) hoặc object để sử dụng trong code PHP.
  • serialize(array): là phương thức dùng để chuyển một mảng(Array) hoặc Object thành string(chuỗi) dữ liệu theo chuẩn của PHP để ta có thể lưu trữ hoặc truyền tải, khi muốn chuyển nó lại thành lại một mảng hoặc phương thức ta dùng phương thức unserialize().

Cookie và session có gì khác nhau? Người ta nói bản thân của session là cookie là đúng hay sai?

COOKIE là một tập tin nhỏ được server nhúng vào máy tính của người dùng. Nếu lần đầu tiên trình duyệt truy cập vào website nó sẽ gửi một COOKIE đến trình duyệt của người dùng, và mỗi khi người dùng tiếp tục yêu cầu một trang web từ website này thì COOKIE với các thông tin thu nhập từ phía người dùng trên website này sẽ được sẽ gửi trả về server của website.

SESSION được hiểu là khoảng thời gian mà người sử dụng giao tiếp với 1 ứng dụng. SESSION được lưu trữ hoàn toàn trên server, do vậy tính bảo mật cao hơn cookie, các website hiện này thường dùng session để lưu thông tin của người dùng khi họ đăng nhập.

Chu kỳ sống của SESSION do webserver qui định, ta có thể điều chỉnh chu kỳ này khi cấu hình webserver, tại server sẽ có 1 PHPSESSID tương ứng được tạo ra, các PHPSESSID sẽ được lưu trong một tập tin văn bản ở tại vị trí được qui định trong file php.ini ở dòng session.save_path.

Người ta nói bản thân của sessioncookie, về cơ bản SESSIONCOOKIE đều là các tập tin lưu trữ lại thông tin của người dùng website, tuy nhiên dựa trên khái miệm, cách sử dụng, ứng dụng của chúng là khác biệt vì thế tôi cho rằng chúng là khác biệt.

Theo bạn, sự khác nhau của toán tử & và && trong PHP là gì?

Toán từ &&& trong PHP đều là phép toán AND, tuy nhiên toán tử một dấu & áp dụng theo kiểu bit, nói dễ hiểu hơn một dấu & là phép AND thao tác trên các bit ví dụ 1 & 0 thì ra 0. Phép toán hai dấu & thì chỉ áp dụng cho kiểu boolean TrueFalse.

Hãy cho biết $a++ và ++$a khác nhau ở đâu?

Cả hai đều được dùng để tăng thêm một đơn vị cho biết số, tuy nhiên điểm khác biệt ở $a++ được thực sau khi nó được gọi, còn ++$a được thực thi ngay khi nó được gọi, lấy ví dụ a bằng 5, khi dung hàm echo để in nó ra với giá trị a++ thì nó sẽ ra là 5, còn khi dùng echo cho ++a thì giá trị của được in ra sẽ là 6.

Mysql_close() cần thiết như thế nào trong thực tế ?. Vì sao ít thấy người dùng áp dụng nó?

Mysql_close() được dùng để đóng kết nối đến cơ sở dữ liệu đã mở trước đó. Điều này rất cần thiết vì nó giúp giảm tải xử lý của database, hiểu đơn giản thế này một người truy cập tới website của bạn và website của bạn có kết nối database và điều đó đồng nghĩa với việc sẽ có ít nhất một kết nối database được tạo, vậy 100 người sẽ có 100 kết nối, và giả sử dụng trong đó có 99 người không sử dụng nữa nhưng kết nối vẫn còn hiệu lực thì điều này có nghĩa là thay vì database phải xử lý chỉ có 1 kết nối mà nó phải xử lý 100 kết nối. Vì sao ít người dùng đầu tiên vì hiệu quả mang lại của hàm này rất khó thấy trong các trường hợp thông thường, trên thực tế khi người dùng không còn sử dụng nữa thì sau một khoảng thời gian ngắn kết nối này sẽ tự động đóng, thứ hai vì ít người có thể nhìn thấy được vấn đề nếu không có dịp tiếp xúc hoặc làm việc với lượng dữ liệu lớn thì sẽ thấy việc mở hoặc đóng một conneciton kịp thời và chính xác sẽ tiết kiệm được rất nhiều tài nguyên cho hệ thống cũng như tốc độ xử lý của hệ thống, vì thế hàm này rất cần thiết khi bạn quản lý tài nguyên và tốc độ thực thi của hệ thống hay của website..

Muốn chuẩn hóa dữ liệu về utf-8 trong PHP ta phải làm gì?

Sử dụng encoding utf-8 tại meta charset trong tập tin PHP. Sử dụng encoding utf-8-unicode-ci trong MySQL.

Cho ví dụ về SESSION ID?

Một developer có kỹ năng sẽ biết session lưu gì, ở đâu và tất nhiên session id là cái gì. Tùy vào thiết kế và môi trường cũng như level của bạn để thấy được session có thể được triển khai bằng file, database hoặc memory (APC, Memcached…) Bạn sẽ biết rằng, SESSION ID là một hash string có chiều dài 32 ký tự, ví dụ “q6galil87hnkafa65r7agnrno4”,….

Hàm include() and require() khác nhau như thế nào?

Cả hai đều đọc một file cụ thể nhưng trong hàm require() thì process sẽ văng ra cùng với 1 fatal error nếu xảy ra vấn đề trong quá trình đọc file và ngăn chặn sự thực thi của script, trong khi đó hàm include() vẫn sẽ pass và chuyển sang step tiếp theo trong quá trình thực thi.

Làm sao để lấy Id Address của client trong PHP?

Chúng ta có nhiều cách để lấy Id address của Client nhưng $\_SERVER["REMOTE_ADDR"] là cách đơn giản nhất.

Sự khác nhau giữa unset() và unlink() trong PHP?

  • unset() dùng để set 1 biến thành undenfined.
  • unlink() dùng để xóa một tập tin được lưu trên máy chủ của bạn.

Làm sao để kích hoạt thông báo lỗi trong PHP?

  • Check xem nếu display_errorson trong file php.ini, hoặc khai báo ini_set('display_errors', 1) trong script.
  • Sau đó include error_reporting(E_ALL) trong code để hiện thị tất cả các loại thông báo lỗi trong suốt quá trình thực thi script.

Việc kích hoạt thông báo lỗi là rất quan trọng, đặc biệt là trong quá trình gỡ lỗi vì người ta có thể ngay lập tức nhận được dòng chính xác đang tạo ra lỗi và cũng có thể thấy nếu đoạn script có đang hoạt động chính xác hay không.

Sự khác biệt giữa == và === là gì?

  • Toán tử == chuyển đổi kiểu giữa hai kiểu khác nhau nếu chúng khác nhau.
  • Toán tử === thực hiện một “so sánh an toàn kiểu (typesafe comparison)”, điều đó có nghĩa là nó sẽ chỉ trả về true nếu cả hai toán hạng có cùng kiểu và cùng giá trị.

1

===

1

:

true

1

==

1

:

true

1

===

"1"

:

false

1

==

"1"

:

true

"foo"

===

"foo"

:

true

Cảnh báo: hai instance của cùng một lớp với các thành viên tương đương nhau sẽ KHÔNG khớp với toán tử ===, ví dụ:

$a

=

new

stdClass

(

)

;

$a

->

foo

=

"bar"

;

$b

=

clone

$a

;

var_dump

(

$a

===

$b

)

;

Làm thế nào bạn có thể truyền một biến bằng cách tham chiếu?

Để có thể truyền một biến bằng tham chiếu, chúng ta sử dụng dấu & ở phía trước nó, như sau:

$var1

=

&

$var2