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

$GLOBALS có nghĩa là gì?

$GLOBALS là mảng kết hợp bao gồm các tham chiếu đến tất cả các biến được định nghĩa trong phạm vi toàn cục của tập lệnh (script).

Mục đích của tệp php.ini là gì?

  • Tệp cấu hình PHP, php.ini, là cách cuối cùng và trực tiếp nhất để ảnh hưởng đến chức năng của PHP.
  • Tệp php.ini được đọc mỗi khi PHP được khởi tạo. Nói cách khác, bất cứ khi nào httpd được khởi động lại cho phiên bản module hoặc với mỗi lần thực thi tập lệnh cho phiên bản CGI.

Hàm ini_set() được dùng làm gì?

PHP cho phép người dùng sửa đổi một số cài đặt được đề cập trong php.ini bằng cách sử dụng ini_set(). Hàm này yêu cầu hai đối số kiểu string. Đối số đầu tiên là tên của cài đặt sẽ được sửa đổi và đối số thứ hai là giá trị mới được gán cho nó.

Dòng mã dưới đây sẽ bật cài đặt display_error cho tập lệnh nếu nó bị tắt.

ini_set

(

'display_errors'

,

'1'

)

;

Chúng ta cần đặt câu lệnh trên ở đầu tập lệnh (script) để cài đặt vẫn được bật cho đến cuối. Ngoài ra, các giá trị được đặt qua ini_set() chỉ có thể áp dụng cho tập lệnh hiện tại. Sau đó, PHP sẽ bắt đầu sử dụng các giá trị ban đầu từ php.ini.

Các key & value trong một mảng được lập chỉ mục là gì?

Array

(

[

0

]

=>

Hello

[

1

]

=>

world

[

2

]

=>

It's

[

3

]

=>

a

[

4

]

=>

beautiful

[

5

]

=>

day

)

Các key của một mảng được lập chỉ mục là 0, 1, 2,… (các giá trị chỉ mục) và các value là “Hello”, “world”, “It’s”, “beautiful”, “day”.

Giải thích cách sử dụng các enumerations trong PHP?

PHP không có Enumerations riêng. Tùy thuộc vào trường hợp sử dụng, tôi thường sử dụng một cái gì đó đơn giản như sau:

abstract

class

DaysOfWeek

{

const

Sunday

=

0

;

const

Monday

=

1

;

}

$today

=

DaysOfWeek

::

Sunday

;

Đây cũng là một native extension. SplEnum cung cấp khả năng mô phỏng và tạo các đối tượng enumeration nguyên bản trong PHP.

StdClass trong PHP là gì?

StdClass chỉ là một lớp ’empty’ chung chung được sử dụng khi truyền các kiểu khác cho các đối tượng. StdClass không phải là lớp cơ sở cho các đối tượng trong PHP. Điều này có thể được chứng minh khá dễ dàng:

class

Foo

{

}

$foo

=

new

Foo

(

)

;

echo

(

$foo

instanceof

stdClass

)

?

'Y'

:

'N'

;

Nó hữu ích cho các đối tượng ẩn danh, thuộc tính động, v.v.

Một cách dễ dàng để coi StdClass là một giải pháp thay thế cho mảng kết hợp. Hãy xem ví dụ dưới đây cho thấy cách json_decode() cho phép lấy một instance của StdClass hoặc một mảng kết hợp. Ngoài ra, SoapClient::\_\_ soapCall trả về một instance của StdClass (không được hiển thị trong ví dụ này).

 

$json

=

'{ "foo": "bar", "number": 42 }'

;

$stdInstance

=

json_decode

(

$json

)

;

echo

$stdInstance

-

>

foo

.

PHP_EOL

;

echo

$stdInstance

-

>

number

.

PHP_EOL

;

$array

=

json_decode

(

$json

,

true

)

;

echo

$array

[

'foo'

]

.

PHP_EOL

;

echo

$array

[

'number'

]

.

PHP_EOL

;

Sự khác biệt giữa các hàm die() và exit() trong PHP là gì?

Chúng không có sự khác biệt – chúng giống nhau. Ưu điểm duy nhất của việc chọn die() thay vì exit(), có thể là việc bạn bớt được một chút thời gian để gõ thêm một ký tự.

Từ khóa ‘var’ trong PHP có nghĩa là gì?

Nó dùng để khai báo các biến thành viên của lớp trong PHP4. Nó vẫn sẽ hoạt động trong PHP5, nhưng sẽ đưa ra cảnh báo E_STRICT trong PHP từ phiên bản 5.0.0 đến phiên bản 5.1.2. Kể từ phiên bản PHP 5.3, var không còn được dùng nữa và thay vào đó là public.

class

foo

{

var

$x

=

'y'

;

public

$x

=

'y'

;

function

bar

(

)

{

}

}

Có sự khác biệt giữa isset và !empty không?

empty ít nhiều là viết tắt của !isset($foo) || !$foo, và !empty tương tự như isset($foo) && $foo. empty cũng giống như !$foo, nhưng không đưa ra cảnh báo nếu biến không tồn tại. Đó là điểm chính của hàm này: thực hiện so sánh boolean mà không cần lo lắng về việc biến được đặt.

Hãy kể các loại lỗi khác nhau trong PHP?

  • Một notice là một lỗi không nghiêm trọng cho biết đã xảy ra sự cố trong quá trình thực thi, một cái gì đó nhỏ như một biến undefined.
  • Một warning được đưa ra khi một lỗi nghiêm trọng hơn ví dụ như lệnh include() truy xuất một tệp không tồn tại. Trong cả lỗi warning này và lỗi notice ở trên, tập lệnh vẫn sẽ tiếp tục.
  • Một fatal error sẽ làm ngưng việc thực thi mã. Ví dụ: việc không đáp ứng một require() sẽ tạo ra loại lỗi này.

Đa kế thừa có được hỗ trợ trong PHP không?

PHP chỉ hỗ trợ kế thừa đơn; nghĩa là một lớp có thể được kế thừa chỉ từ một lớp duy nhất bằng cách sử dụng từ khóa extended.

Trong PHP, các đối tượng được truyền theo giá trị hay tham chiếu?

Trong PHP, các đối tượng được truyền theo giá trị (pass by value).

PDO trong PHP là gì?

PDO là viết tắt của PHP Data Object.

Nó là một tập hợp các PHP extension cung cấp một lớp PDO core và cơ sở dữ liệu, các drivers cụ thể. Nó cung cấp một layer trừu tượng truy cập dữ liệu, nhẹ, của nhà cung cấp. Vì vậy, cho dù chúng ta sử dụng cơ sở dữ liệu nào, thì chức năng đưa ra truy vấn và tìm nạp dữ liệu sẽ giống nhau. Nó tập trung vào trừu tượng truy cập dữ liệu hơn là trừu tượng hóa cơ sở dữ liệu.

Giải thích cách chúng ta xử lý các exception trong PHP?

Khi một exception được thảy ra, mã theo sau câu lệnh sẽ không được thực thi và PHP sẽ cố gắng tìm khối catch phù hợp đầu tiên. Nếu một exception không được bắt, một PHP Fatal Error sẽ được đưa ra với Uncaught Exception. Một exception có thể được thảy và bắt trong PHP.

Để xử lý các exception, mã có thể được bao quanh trong một khối try. Mỗi try phải có ít nhất một khối catch. Nhiều khối catch có thể được sử dụng để bắt các lớp exception khác nhau. Các exception có thể được thảy (hoặc thảy lại) trong một khối catch.

try

{

print

"this is our try block n"

;

throw

new

Exception

(

)

;

}

catch

(

Exception

$e

)

{

print

"something went wrong, caught yah! n"

;

}

finally

{

print

"this part is always executed n"

;

}

Ý nghĩa của key và value là gì?

Trong mảng kết hợp, chúng ta có thể sử dụng các key đã đặt tên mà bạn gán cho chúng. Có hai cách để tạo một mảng kết hợp:

 

$age

=

array

(

"Peter"

=>

"35"

,

"Ben"

=>

"37"

,

"Joe"

=>

"43"

)

;

`

$age

[

'Peter'

]

=

"35"

;

$age

[

'Ben'

]

=

"37"

;

$age

[

'Joe'

]

=

"43"

;

Sự khác nhau giữa echo và print()?

echoprint ít nhiều giống nhau. Cả hai đều được sử dụng để xuất dữ liệu ra màn hình.

Sự khác biệt là:

  • echo không có giá trị trả về trong khi print có giá trị trả về là 1 nên nó có thể được sử dụng trong các biểu thức.
  • echo có thể nhận nhiều tham số (mặc dù hiếm khi sử dụng) trong khi print có thể lấy một đối số.
  • echo nhanh hơn print.

Khi nào chúng ta nên sử dụng request thay vì include?

  • Hàm request() giống hệt với hàm include(), ngoại trừ việc nó xử lý các lỗi khác nhau. Nếu xảy ra lỗi, hàm include() tạo ra warning, và tập lệnh vẫn sẽ tiếp tục thực thi. require() tạo ra một fatal error và tập lệnh sẽ dừng lại.
  • Đề xuất của tôi là hãy sử dụng request_once trong 99,9% thời gian.
  • Thay vào đó, việc sử dụng request hoặc include ngụ ý rằng mã của bạn không thể sử dụng lại được ở nơi khác, tức là các đoạn mã bạn đang lấy thực sự thực thi mã thay vì tạo sẵn một lớp hoặc một số thư viện hàm.

Sự khác biệt giữa nháy đơn và nháy kép trong PHP là gì?

  • Các chuỗi trong nháy đơn sẽ hiển thị mọi thứ gần như hoàn toàn nguyên trạng.
  • Các chuỗi trong nháy kép sẽ hiển thị một loạt các ký tự escaped (bao gồm một số regex) và các biến trong chuỗi sẽ được tính toán.

Mọi thứ được tính toán trong dấu nháy kép nhưng sẽ không trong dấu nháy đơn:

$s

=

"dollars"

;

echo

'This costs a lot of $s.'

;

echo

"This costs a lot of

$s

."

;