Hướng dẫn php syntax and semantics - cú pháp và ngữ nghĩa php

Hướng dẫn php syntax and semantics - cú pháp và ngữ nghĩa php

Bài viết này cần được cập nhật. Vui lòng giúp cập nhật bài viết này để phản ánh các sự kiện gần đây hoặc thông tin mới có sẵn. (Tháng 6 năm 2022)updated. Please help update this article to reflect recent events or newly available information. (June 2022)

Cú pháp và ngữ nghĩa của PHP, một ngôn ngữ lập trình, tạo thành một tập hợp các quy tắc xác định cách viết và giải thích chương trình PHP.

Overview[edit][edit]

Trong lịch sử, sự phát triển của PHP có phần hỗn loạn. Để chống lại điều này, Nhóm Interop Framework (Hình) đã tạo ra các tài liệu khuyến nghị tiêu chuẩn PHP (PSR) đã giúp mang lại tiêu chuẩn hóa nhiều hơn cho ngôn ngữ kể từ năm 2009. [1] Các tiêu chuẩn mã hóa hiện đại được chứa trong PSR-1 (tiêu chuẩn mã hóa cơ bản) [2] và PSR-2 (Hướng dẫn kiểu mã hóa). [3]

Keywords[edit][edit]

Một số từ khóa đại diện cho những thứ trông giống như các chức năng, một số trông giống như các hằng số, nhưng chúng thực sự là các cấu trúc ngôn ngữ. Nó bị cấm sử dụng bất kỳ từ khóa nào làm hằng số, tên lớp, chức năng hoặc phương thức. Sử dụng chúng làm tên biến được cho phép, nhưng nó có thể gây nhầm lẫn. [4]

  • if (condition) dosomething();
    elseif (condition2) dosomethingelse();
    else doyetathirdthing();
    
    4
  • if (condition) dosomething();
    elseif (condition2) dosomethingelse();
    else doyetathirdthing();
    
    5
  • if (condition) dosomething();
    elseif (condition2) dosomethingelse();
    else doyetathirdthing();
    
    6
  • if (condition) dosomething();
    elseif (condition2) dosomethingelse();
    else doyetathirdthing();
    
    7
  • if (condition) dosomething();
    elseif (condition2) dosomethingelse();
    else doyetathirdthing();
    
    8
  • if (condition) dosomething();
    elseif (condition2) dosomethingelse();
    else doyetathirdthing();
    
    9
  • $abs = $value >= 0 ? $value : -$value;
    
    /* Equivalent to */
    
    if ($value >= 0) {
        $abs = $value;
    } else {
        $abs = -$value;
    }
    
    0 (kể từ Php 5.4)
  • $abs = $value >= 0 ? $value : -$value;
    
    /* Equivalent to */
    
    if ($value >= 0) {
        $abs = $value;
    } else {
        $abs = -$value;
    }
    
    1
  • $abs = $value >= 0 ? $value : -$value;
    
    /* Equivalent to */
    
    if ($value >= 0) {
        $abs = $value;
    } else {
        $abs = -$value;
    }
    
    2
  • $abs = $value >= 0 ? $value : -$value;
    
    /* Equivalent to */
    
    if ($value >= 0) {
        $abs = $value;
    } else {
        $abs = -$value;
    }
    
    3
  • $abs = $value >= 0 ? $value : -$value;
    
    /* Equivalent to */
    
    if ($value >= 0) {
        $abs = $value;
    } else {
        $abs = -$value;
    }
    
    4
  • $abs = $value >= 0 ? $value : -$value;
    
    /* Equivalent to */
    
    if ($value >= 0) {
        $abs = $value;
    } else {
        $abs = -$value;
    }
    
    5
  • $abs = $value >= 0 ? $value : -$value;
    
    /* Equivalent to */
    
    if ($value >= 0) {
        $abs = $value;
    } else {
        $abs = -$value;
    }
    
    6
  • $abs = $value >= 0 ? $value : -$value;
    
    /* Equivalent to */
    
    if ($value >= 0) {
        $abs = $value;
    } else {
        $abs = -$value;
    }
    
    7
  • $abs = $value >= 0 ? $value : -$value;
    
    /* Equivalent to */
    
    if ($value >= 0) {
        $abs = $value;
    } else {
        $abs = -$value;
    }
    
    8
  • $abs = $value >= 0 ? $value : -$value;
    
    /* Equivalent to */
    
    if ($value >= 0) {
        $abs = $value;
    } else {
        $abs = -$value;
    }
    
    9
  • $c = $a ?: $b; 
    
    /* Equivalent to */
    
    $c = $a ? $a : $b;
    
    0
  • $c = $a ?: $b; 
    
    /* Equivalent to */
    
    $c = $a ? $a : $b;
    
    1
  • $c = $a ?: $b; 
    
    /* Equivalent to */
    
    $c = $a ? $a : $b;
    
    2
  • $c = $a ?: $b; 
    
    /* Equivalent to */
    
    $c = $a ? $a : $b;
    
    3
  • $c = $a ?: $b; 
    
    /* Equivalent to */
    
    $c = $a ? $a : $b;
    
    4
  • $c = $a ?: $b; 
    
    /* Equivalent to */
    
    $c = $a ? $a : $b;
    
    5
  • $c = $a ?: $b; 
    
    /* Equivalent to */
    
    $c = $a ? $a : $b;
    
    6
  • $c = $a ?: $b; 
    
    /* Equivalent to */
    
    $c = $a ? $a : $b;
    
    7
  • $c = $a ?: $b; 
    
    /* Equivalent to */
    
    $c = $a ? $a : $b;
    
    8
  • $c = $a ?: $b; 
    
    /* Equivalent to */
    
    $c = $a ? $a : $b;
    
    9
  • $a = $b ?? $c;
    
    /* Equivalent to */
    
    $a = isset($b) ? $b : $c;
    
    0
  • $a = $b ?? $c;
    
    /* Equivalent to */
    
    $a = isset($b) ? $b : $c;
    
    1
  • $a = $b ?? $c;
    
    /* Equivalent to */
    
    $a = isset($b) ? $b : $c;
    
    2
  • $a = $b ?? $c;
    
    /* Equivalent to */
    
    $a = isset($b) ? $b : $c;
    
    3
  • $a = $b ?? $c;
    
    /* Equivalent to */
    
    $a = isset($b) ? $b : $c;
    
    4
  • $a = $b ?? $c;
    
    /* Equivalent to */
    
    $a = isset($b) ? $b : $c;
    
    5 (kể từ Php 5.5)
  • $a = $b ?? $c;
    
    /* Equivalent to */
    
    $a = isset($b) ? $b : $c;
    
    6 (kể từ Php 7.4)
  • $a = $b ?? $c;
    
    /* Equivalent to */
    
    $a = isset($b) ? $b : $c;
    
    7
  • $a = $b ?? $c;
    
    /* Equivalent to */
    
    $a = isset($b) ? $b : $c;
    
    8
  • $a = $b ?? $c;
    
    /* Equivalent to */
    
    $a = isset($b) ? $b : $c;
    
    9
  • $a ??= $b;
    
    /* Equivalent to */
    
    $a = $a ?? $b;
    
    0
  • $a ??= $b;
    
    /* Equivalent to */
    
    $a = $a ?? $b;
    
    1 (kể từ Php 5.3)
  • $a ??= $b;
    
    /* Equivalent to */
    
    $a = $a ?? $b;
    
    2
  • $a ??= $b;
    
    /* Equivalent to */
    
    $a = $a ?? $b;
    
    3
  • $a ??= $b;
    
    /* Equivalent to */
    
    $a = $a ?? $b;
    
    4
  • $a ??= $b;
    
    /* Equivalent to */
    
    $a = $a ?? $b;
    
    5
  • $a ??= $b;
    
    /* Equivalent to */
    
    $a = $a ?? $b;
    
    6
  • $a ??= $b;
    
    /* Equivalent to */
    
    $a = $a ?? $b;
    
    7 (kể từ Php 5.4)
  • $a ??= $b;
    
    /* Equivalent to */
    
    $a = $a ?? $b;
    
    8
  • $a ??= $b;
    
    /* Equivalent to */
    
    $a = $a ?? $b;
    
    9
  • $variable = $object?->method();
    
    /* Equivalent to */
    
    $variable =  $object !== null ? $object->method() : null;
    
    0
  • $variable = $object?->method();
    
    /* Equivalent to */
    
    $variable =  $object !== null ? $object->method() : null;
    
    1 (kể từ Php 8.0)
  • $variable = $object?->method();
    
    /* Equivalent to */
    
    $variable =  $object !== null ? $object->method() : null;
    
    2 (kể từ Php 5.3)
  • $variable = $object?->method();
    
    /* Equivalent to */
    
    $variable =  $object !== null ? $object->method() : null;
    
    3
  • $variable = $object?->method();
    
    /* Equivalent to */
    
    $variable =  $object !== null ? $object->method() : null;
    
    4
  • $variable = $object?->method();
    
    /* Equivalent to */
    
    $variable =  $object !== null ? $object->method() : null;
    
    5
  • $variable = $object?->method();
    
    /* Equivalent to */
    
    $variable =  $object !== null ? $object->method() : null;
    
    6
  • $variable = $object?->method();
    
    /* Equivalent to */
    
    $variable =  $object !== null ? $object->method() : null;
    
    7
  • $variable = $object?->method();
    
    /* Equivalent to */
    
    $variable =  $object !== null ? $object->method() : null;
    
    8
  • $variable = $object?->method();
    
    /* Equivalent to */
    
    $variable =  $object !== null ? $object->method() : null;
    
    9
  • Hello World!
    
    00
  • Hello World!
    
    01
  • Hello World!
    
    02
  • Hello World!
    
    03
  • Hello World!
    
    04
  • Hello World!
    
    05 (kể từ Php 5.4)
  • Hello World!
    
    06
  • Hello World!
    
    07
  • Hello World!
    
    08
  • Hello World!
    
    09
  • Hello World!
    
    10
  • Hello World!
    
    11
  • Hello World!
    
    12 (kể từ Php 5.5)
  • Hello World!
    
    13 (kể từ Php 7.0)

Cấu trúc ngôn ngữ cơ bản [Chỉnh sửa][edit]

PHP thường tuân theo C cú pháp C, với các ngoại lệ và cải tiến cho việc sử dụng chính trong phát triển web, điều này sử dụng nhiều thao tác chuỗi. Các biến PHP phải được tiền tố bởi "

Hello World!
14". Điều này cho phép PHP thực hiện phép nội suy chuỗi trong các chuỗi được trích dẫn kép, trong đó dấu gạch chéo ngược được hỗ trợ như một ký tự thoát. Không có sự thoát hoặc nội suy được thực hiện trên các chuỗi được phân định bằng các trích dẫn đơn. PHP cũng hỗ trợ chức năng Sprintf giống C. Mã có thể được mô đun hóa thành các chức năng được xác định với từ khóa
$a = $b ?? $c;

/* Equivalent to */

$a = isset($b) ? $b : $c;
9. PHP hỗ trợ kiểu mã hóa định hướng đối tượng tùy chọn, với các lớp được biểu thị bằng từ khóa
$abs = $value >= 0 ? $value : -$value;

/* Equivalent to */

if ($value >= 0) {
    $abs = $value;
} else {
    $abs = -$value;
}
3. Các chức năng được xác định bên trong các lớp đôi khi được gọi là các phương thức. Các cấu trúc điều khiển bao gồm:
$a ??= $b;

/* Equivalent to */

$a = $a ?? $b;
2,
Hello World!
10,
Hello World!
19,
$a = $b ?? $c;

/* Equivalent to */

$a = isset($b) ? $b : $c;
7,
$a = $b ?? $c;

/* Equivalent to */

$a = isset($b) ? $b : $c;
8 và
Hello World!
03. Các tuyên bố bị chấm dứt bởi một dấu chấm phẩy, không phải kết thúc dòng. [5]

Delimiters[edit][edit]

Bộ xử lý PHP chỉ phân tích mã trong các trình phân cách của nó. Bất cứ điều gì bên ngoài các phân định của nó được gửi trực tiếp đến đầu ra và không được phân tích bởi PHP. Các phân định mở/đóng duy nhất được PSR-1 [6] cho phép là "

Hello World!
23" và "
Hello World!
24" hoặc
Hello World!
25 và
Hello World!
24.

Mục đích của các thẻ phân định là tách mã PHP khỏi dữ liệu không phải Php (chủ yếu là HTML). Mặc dù hiếm trong thực tế, PHP sẽ thực thi mã được nhúng trong bất kỳ tệp nào được truyền cho trình thông dịch của nó, bao gồm các tệp nhị phân như tệp PDF hoặc JPEG hoặc trong các tệp nhật ký máy chủ. [7] [8] Tất cả mọi thứ bên ngoài các dấu phân cách đều bị phân tích cú pháp PHP và được chuyển qua dưới dạng đầu ra. [9]

Các phân định được đề xuất này tạo ra XHTML được hình thành chính xác và các tài liệu XML khác. [10] Điều này có thể hữu ích nếu các tài liệu mã nguồn cần được xử lý theo những cách khác trong suốt cuộc đời của phần mềm.

Nếu xác thực XML thích hợp không phải là vấn đề và tệp chỉ chứa mã PHP, thì tốt nhất là bỏ qua thẻ đóng PHP (

Hello World!
27) ở cuối tệp. [11]

Thẻ không được đề xuất [Chỉnh sửa][edit]

Các phân định khác có thể được sử dụng trên một số máy chủ, mặc dù hầu hết không còn được hỗ trợ. [12] Ví dụ là:

  • "
    Hello World!
    
    28" và "
    Hello World!
    
    29" (bị loại bỏ trong PHP7)
  • Thẻ mở ngắn (
    Hello World!
    
    30) (được cấu hình với cài đặt INI
    Hello World!
    
    31)
    • Một hình thức đặc biệt của thẻ
      Hello World!
      
      30 là
      Hello World!
      
      33, tự động lặp lại câu lệnh tiếp theo. Trước Php 5.4.0, điều này cũng được kiểm soát với
      Hello World!
      
      31, nhưng luôn có sẵn trong các phiên bản sau.
  • Thẻ kiểu ASP (
    Hello World!
    
    35 hoặc
    Hello World!
    
    36) (Đã xóa trong PHP7)

Biến và nhận xét [Chỉnh sửa][edit]

Các biến được tiền tố với ký hiệu đô la và một loại không cần phải được chỉ định trước. Không giống như tên chức năng và tên lớp, tên biến là nhạy cảm trường hợp. Cả hai chuỗi được trích xuất kép (

Hello World!
37) và heredoc đều cho phép khả năng nhúng giá trị của một biến vào chuỗi. [13] Như trong C, các biến có thể được chuyển thành một loại cụ thể bằng cách tiền tố loại trong ngoặc đơn. PHP coi Newlines là khoảng trắng, theo cách của ngôn ngữ dạng tự do. Toán tử nối là
Hello World!
38 (DOT). Các phần tử mảng được truy cập và đặt với dấu ngoặc vuông trong cả hai mảng kết hợp và mảng được lập chỉ mục. Dấu ngoặc xoăn có thể được sử dụng để truy cập các thành phần mảng, nhưng không được gán.

PHP có ba loại cú pháp bình luận:

Hello World!
39 đóng vai trò là bình luận khối và
Hello World!
40 cũng như
Hello World!
41 được sử dụng cho các nhận xét nội tuyến. [14] Nhiều ví dụ sử dụng hàm
$variable = $object?->method();

/* Equivalent to */

$variable =  $object !== null ? $object->method() : null;
5 thay vì hàm
$c = $a ?: $b; 

/* Equivalent to */

$c = $a ? $a : $b;
1. Cả hai chức năng gần như giống hệt nhau; Sự khác biệt chính là
$variable = $object?->method();

/* Equivalent to */

$variable =  $object !== null ? $object->method() : null;
5 chậm hơn
$c = $a ?: $b; 

/* Equivalent to */

$c = $a ? $a : $b;
1 vì cái trước sẽ trả về trạng thái cho biết nó có thành công hay không ngoài văn bản cho đầu ra, trong khi cái sau không trả về trạng thái và chỉ trả về văn bản cho đầu ra. [15]

Chương trình đơn giản nhất [Chỉnh sửa][edit]

Ví dụ về mã "Hello World" thông thường cho PHP là: [16]


echo "Hello World!\n";
?>

Ví dụ trên đầu ra như sau:

Hello World!

Thay vì sử dụng câu lệnh

Hello World!
23 và
Hello World!
47, một "phím tắt" tùy chọn là việc sử dụng
Hello World!
25 thay vì
Hello World!
23 mà ngầm lặp lại dữ liệu. Ví dụ:


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>

Ví dụ trên cũng minh họa rằng văn bản không chứa trong các thẻ PHP kèm theo sẽ được đầu ra trực tiếp.

Operators[edit][edit]

PHP hỗ trợ: toán tử số học, toán tử chuyển nhượng, toán tử bitwise, toán tử so sánh, toán tử kiểm soát lỗi, toán tử thực thi, toán tử tăng/giảm, toán tử logic, toán tử chuỗi, toán tử mảng, toán tử gán có điều kiện. [17]

Cấu trúc kiểm soát [Chỉnh sửa][edit]

Conditionals[edit][edit]

Nếu ... tuyên bố khác [Chỉnh sửa][edit]

Cú pháp của PHP nếu ... câu lệnh khác như sau:

if (condition) {
    // statements;
} elseif (condition2) {
    // statements;
} else {
    // statements;
}

Đối với các câu lệnh duy nhất, các dấu ngoặc có thể bị bỏ qua và IF tùy ý ngưng tụ thành một dòng duy nhất:

if (condition) dosomething();
elseif (condition2) dosomethingelse();
else doyetathirdthing();

Toán tử điều kiện ternary [Chỉnh sửa][edit]

$abs = $value >= 0 ? $value : -$value;

/* Equivalent to */

if ($value >= 0) {
    $abs = $value;
} else {
    $abs = -$value;
}

Nhà điều hành Elvis [Chỉnh sửa][edit]

Vì PHP 5.3 hỗ trợ toán tử Elvis (

Hello World!
50) trong đó có thể bỏ qua phần giữa của toán tử ternary.

$c = $a ?: $b; 

/* Equivalent to */

$c = $a ? $a : $b;

Nhà điều hành Null Coalescing [Chỉnh sửa][edit]

Vì phiên bản 7.0 PHP cũng hỗ trợ toán tử Null Coalescing (

Hello World!
51).

$a = $b ?? $c;

/* Equivalent to */

$a = isset($b) ? $b : $c;

Kể từ phiên bản 7.4 PHP cũng hỗ trợ toán tử Null Coalescing với cú pháp

Hello World!
52.

$a ??= $b;

/* Equivalent to */

$a = $a ?? $b;

Toán tử điều hướng an toàn [Chỉnh sửa][edit]

Vì phiên bản 8.0 PHP cũng hỗ trợ toán tử điều hướng an toàn (

Hello World!
53).

$variable = $object?->method();

/* Equivalent to */

$variable =  $object !== null ? $object->method() : null;

Tuyên bố chuyển đổi [Chỉnh sửa][edit]

Một ví dụ về cú pháp của câu lệnh chuyển đổi PHP như sau:

Hello World!
0

Lưu ý rằng không giống như trong C, các giá trị trong câu lệnh trường hợp có thể là bất kỳ loại nào, không chỉ số nguyên. [18]

Biểu thức phù hợp [Chỉnh sửa][edit]

Php 8 giới thiệu biểu thức

$variable = $object?->method();

/* Equivalent to */

$variable =  $object !== null ? $object->method() : null;
1. [19] Biểu thức trận đấu tương tự về mặt khái niệm với câu lệnh
Hello World!
03 và nhỏ gọn hơn đối với một số trường hợp sử dụng. [20]

Hello World!
1

Loops[edit][edit]

Cho Loop [Chỉnh sửa][edit]

Cú pháp PHP của vòng lặp cho vòng như sau:

Hello World!
2

Trong khi vòng lặp [chỉnh sửa][edit]

Cú pháp cho một PHP trong khi vòng lặp như sau:

Hello World!
3

Làm trong khi vòng lặp [chỉnh sửa][edit]

Cú pháp cho một php làm trong khi vòng lặp như sau:

Hello World!
4

Đối với mỗi vòng [Chỉnh sửa][edit]

Cú pháp cho một PHP cho mỗi vòng lặp như sau:

Hello World!
5

Cú pháp thay thế cho các cấu trúc điều khiển [Chỉnh sửa][edit]

PHP cung cấp một cú pháp thay thế bằng cách sử dụng các dấu chấm câu thay vì cú pháp Brace Brace tiêu chuẩn (của "

Hello World!
56"). Cú pháp này ảnh hưởng đến các cấu trúc điều khiển sau:
$a ??= $b;

/* Equivalent to */

$a = $a ?? $b;
2,
Hello World!
10,
$a = $b ?? $c;

/* Equivalent to */

$a = isset($b) ? $b : $c;
7,
$a = $b ?? $c;

/* Equivalent to */

$a = isset($b) ? $b : $c;
8 và
Hello World!
03. Cú pháp chỉ thay đổi một chút so với cú pháp trace xoăn. Trong mỗi trường hợp, nẹp mở (
Hello World!
62) được thay thế bằng một dấu hai chấm (
Hello World!
63) và nẹp gần được thay thế bằng
Hello World!
64,
Hello World!
65,
Hello World!
66,
Hello World!
67 hoặc
Hello World!
68, tương ứng. [21] Trộn các kiểu cú pháp trong cùng một khối điều khiển không được hỗ trợ. Một ví dụ về cú pháp cho câu lệnh ________ 82/________ 63 như sau:

Hello World!
6

Kiểu này đôi khi được gọi là cú pháp mẫu, vì nó thường được tìm thấy dễ đọc hơn khi kết hợp PHP và HTML hoặc JavaScript cho đầu ra có điều kiện:

Hello World!
7

Xử lý ngoại lệ [Chỉnh sửa][edit]

Phương pháp xử lý ngoại lệ thời gian chạy trong PHP được kế thừa từ C ++. [22]

Hello World!
8

Kiểu dữ liệu [Chỉnh sửa][edit]

Các loại vô hướng [Chỉnh sửa][edit]

PHP hỗ trợ bốn loại vô hướng:

Hello World!
71,
Hello World!
72,
Hello World!
73, ________ 174. [23]

Boolean[edit][edit]

PHP có loại Boolean gốc, có tên là "

Hello World!
71", tương tự như các loại boolean bản địa trong Java và C ++. Sử dụng các quy tắc chuyển đổi kiểu Boolean, các giá trị khác không được hiểu là
Hello World!
76 và 0 là
Hello World!
77, như trong Perl. Cả hai hằng số
Hello World!
76 và
Hello World!
77 đều không nhạy cảm trường hợp. [24]

Integer[edit][edit]

PHP lưu trữ toàn bộ số trong một phạm vi phụ thuộc vào nền tảng. Phạm vi này thường là số nguyên có chữ ký 32 bit hoặc 64 bit. [25] Các biến số nguyên có thể được gán bằng các ký hiệu thập phân (dương và âm), octal và thập lục phân.

Hello World!
9

Float[edit][edit]

Số thực cũng được lưu trữ trong một phạm vi cụ thể nền tảng. Chúng có thể được chỉ định bằng cách sử dụng ký hiệu điểm nổi, hoặc hai dạng ký hiệu khoa học. [26]


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
0

String[edit][edit]

PHP supports

Hello World!
80, which can be used with single quotes, double quotes, nowdoc or heredoc syntax.[27]

Double quoted strings support variable interpolation:


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
1

Curly braces syntax:[28]


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
2

Special types[edit]

PHP supports two special types:

Hello World!
81,
Hello World!
82. The
Hello World!
81 data type represents a variable that has no value. The only value in the
Hello World!
81 data type is NULL. The NULL constant is not case sensitive.[29] Variables of the "
Hello World!
82" type represent references to resources from external sources. These are typically created by functions from a particular extension, and can only be processed by functions from the same extension. Examples include file, image and database resources.[23]

Compound types[edit]

PHP supports four compound types:

Hello World!
86,
Hello World!
87,
$abs = $value >= 0 ? $value : -$value;

/* Equivalent to */

if ($value >= 0) {
    $abs = $value;
} else {
    $abs = -$value;
}
0,
Hello World!
89.

Array[edit][edit]

Arrays can contain mixed elements of any type, including resources, objects.[30] Multi-dimensional arrays are created by assigning arrays as array elements. PHP has no true array type. PHP arrays are natively sparse and associative. Indexed arrays are simply hashes using integers as keys.

Indexed array:


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
3

Associative array:


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
4

Multidimensional array:


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
5

Object[edit][edit]

The

Hello World!
87 data type is a combination of variables, functions and data structures in the object-oriented programming paradigm.


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
6

Callable[edit][edit]

Since version 5.3 PHP has first-class functions that can be used e.g. as an argument to another function.


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
7

Iterable[edit][edit]

Hello World!
91 type indicate that variable can be used with
$a = $b ?? $c;

/* Equivalent to */

$a = isset($b) ? $b : $c;
8 loop.[31] It can be any
Hello World!
86 or
Hello World!
94 or object that implementing the special internal
Hello World!
95[32] interface.


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
8

Union types[edit]

Union types were introduced in PHP 8.0[33]


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
9

Functions[edit][edit]

PHP has hundreds of base functions and thousands more from extensions. Prior to PHP version 5.3.0, functions are not first-class functions and can only be referenced by their name, whereas PHP 5.3.0 introduces closures.[34] User-defined functions can be created at any time and without being prototyped.[34] Functions can be defined inside code blocks, permitting a run-time decision as to whether or not a function should be defined. There is no concept of local functions. Function calls must use parentheses with the exception of zero argument class constructor functions called with the PHP

$variable = $object?->method();

/* Equivalent to */

$variable =  $object !== null ? $object->method() : null;
3 operator, where parentheses are optional.

An example function definition is the following:

if (condition) {
    // statements;
} elseif (condition2) {
    // statements;
} else {
    // statements;
}
0

Function calls may be made via variables, where the value of a variable contains the name of the function to call. This is illustrated in the following example:

if (condition) {
    // statements;
} elseif (condition2) {
    // statements;
} else {
    // statements;
}
1

A default value for parameters can be assigned in the function definition, but prior to PHP 8.0 did not support named parameters or parameter skipping.[35] Some core PHP developers have publicly expressed disappointment with this decision.[36] Others have suggested workarounds for this limitation.[37]

Named arguments[edit]

Named arguments were introduced in PHP 8.0

if (condition) {
    // statements;
} elseif (condition2) {
    // statements;
} else {
    // statements;
}
2

Type declaration[edit]

Specifying the types of function parameters and function return values has been supported since PHP 7.0.[38]

Return type declaration:

if (condition) {
    // statements;
} elseif (condition2) {
    // statements;
} else {
    // statements;
}
3

Parameters typing:

if (condition) {
    // statements;
} elseif (condition2) {
    // statements;
} else {
    // statements;
}
4

Strict typing[edit]

Without strict typing enabled:

if (condition) {
    // statements;
} elseif (condition2) {
    // statements;
} else {
    // statements;
}
5

With strict typing enabled:

if (condition) {
    // statements;
} elseif (condition2) {
    // statements;
} else {
    // statements;
}
6

Anonymous functions[edit]

PHP supports true anonymous functions as of version 5.3.[34] In previous versions, PHP only supported quasi-anonymous functions through the

Hello World!
97 function.

if (condition) {
    // statements;
} elseif (condition2) {
    // statements;
} else {
    // statements;
}
7

Since version 7.4 PHP also supports arrow functions syntax (

Hello World!
98).[39]

if (condition) {
    // statements;
} elseif (condition2) {
    // statements;
} else {
    // statements;
}
8

Closures[edit][edit]

Сreating closures

if (condition) {
    // statements;
} elseif (condition2) {
    // statements;
} else {
    // statements;
}
9

using

if (condition) dosomething();
elseif (condition2) dosomethingelse();
else doyetathirdthing();
0

Generators[edit][edit]

Using generators, we can write code that uses foreach to iterate over a dataset without having to create an array in memory, which can result in memory overhead or significant processing time for generation.

Objects[edit][edit]

Basic object-oriented programming functionality was added in PHP 3.[40] Object handling was completely rewritten for PHP 5, expanding the feature set and enhancing performance.[41] In previous versions of PHP, objects were handled like primitive types.[41] The drawback of this method was that the whole object was copied when a variable was assigned or passed as a parameter to a method. In the new approach, objects are referenced by handle, and not by value. PHP 5 introduced private and protected member variables and methods, along with abstract classes and final classes as well as abstract methods and final methods. It also introduced a standard way of declaring constructors and destructors, similar to that of other object-oriented languages such as C++, and a standard exception handling model. Furthermore PHP 5 added Interfaces and allows for multiple Interfaces to be implemented. There are special interfaces that allow objects to interact with the runtime system. Objects implementing ArrayAccess can be used with array syntax and objects implementing Iterator or IteratorAggregate can be used with the foreach language construct. The static method and class variable features in Zend Engine 2 do not work the way some would expect. There is no virtual table feature in the engine, so static variables are bound with a name instead of a reference at compile time.[42]

Ví dụ này cho thấy cách xác định một lớp,

Hello World!
99, kế thừa từ lớp

<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
00. Phương pháp

<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
01 là một phương pháp tĩnh công khai có thể được gọi bằng

<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
02.

if (condition) dosomething();
elseif (condition2) dosomethingelse();
else doyetathirdthing();
1

Nếu nhà phát triển tạo một bản sao của một đối tượng bằng cách sử dụng bản sao từ dành riêng, động cơ Zend sẽ kiểm tra xem phương thức


<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
03 có được xác định hay không. Nếu không, nó sẽ gọi một mặc định

<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
03 sẽ sao chép các thuộc tính của đối tượng. Nếu phương thức

<html>
    <head>
        <title>PHP "Hello, World!" programtitle>
    head>
    <body>
        <p>="Hello World!"?>p>
    body>
html>
03 được xác định, thì nó sẽ chịu trách nhiệm đặt các thuộc tính cần thiết trong đối tượng được tạo. Để thuận tiện, động cơ sẽ cung cấp một hàm nhập các thuộc tính của đối tượng nguồn, để lập trình viên có thể bắt đầu bằng bản sao giá trị phụ của đối tượng nguồn và chỉ ghi đè các thuộc tính cần thay đổi. [43]

Traits[edit][edit]

Ví dụ này sử dụng một đặc điểm để tăng cường các lớp khác:

if (condition) dosomething();
elseif (condition2) dosomethingelse();
else doyetathirdthing();
2

Điều này cho phép mô phỏng các khía cạnh của nhiều kế thừa:

if (condition) dosomething();
elseif (condition2) dosomethingelse();
else doyetathirdthing();
3

Xem thêm [sửa][edit]

  • Ngôn ngữ đánh dấu siêu văn bản (HTML)
  • Công cụ mẫu (Web)

References[edit][edit]

  1. ^PSR-Huh? PSR-Huh?
  2. ^PSR-1 PSR-1
  3. ^PSR-2 PSR-2
  4. ^PHP: Danh sách các từ khóa - Hướng dẫn sử dụng PHP: List of Keywords - Manual
  5. ^"Phân tách hướng dẫn". Nhóm PHP. Truy cập 2008-03-16. "Instruction separation". The PHP Group. Retrieved 2008-03-16.
  6. ^"PSR-1: Tiêu chuẩn mã hóa cơ bản-PHP-fig". "PSR-1: Basic Coding Standard - PHP-FIG".
  7. ^"Tiêm mã - Một loại virus PHP đơn giản được mang trong hình ảnh JPEG". "Code injection – a simple PHP virus carried in a JPEG image".
  8. ^Trẻ, Susan; Aitel, Dave (24 tháng 11 năm 2003). Cẩm nang của Hacker: Chiến lược đằng sau đột nhập và bảo vệ các mạng. ISBN & NBSP; 9780203490044. Young, Susan; Aitel, Dave (24 November 2003). The Hacker's Handbook: The Strategy Behind Breaking into and Defending Networks. ISBN 9780203490044.
  9. ^"Trang hỗ trợ PHP đầu tiên của bạn". Nhóm PHP. Truy cập 2008-02-25. "Your first PHP-enabled page". The PHP Group. Retrieved 2008-02-25.
  10. ^Bray, Tim; et & nbsp; al. (26 tháng 11 năm 2008). "Hướng dẫn xử lý". Ngôn ngữ đánh dấu mở rộng (XML) 1.0 (Phiên bản thứ năm). W3C. Truy cập 2009-06-18. Bray, Tim; et al. (26 November 2008). "Processing Instructions". Extensible Markup Language (XML) 1.0 (Fifth Edition). W3C. Retrieved 2009-06-18.
  11. ^"Thẻ PHP". "PHP tags".
  12. ^"PHP: Cú pháp cơ bản". Nhóm PHP. Truy cập 2008-02-22. "PHP: Basic syntax". The PHP Group. Retrieved 2008-02-22.
  13. ^"Biến". Nhóm PHP. Truy cập 2008-03-16. "Variables". The PHP Group. Retrieved 2008-03-16.
  14. ^"Nhận xét". Nhóm PHP. Truy cập 2008-03-16. "Comments". The PHP Group. Retrieved 2008-03-16.
  15. ^"In". Nhóm PHP. Truy cập 2008-03-16. "print". The PHP Group. Retrieved 2008-03-16.
  16. ^"Xin chào thế giới". Mã Newbie. Truy cập 2008-02-25. "Hello World". Code Newbie. Retrieved 2008-02-25.
  17. ^"PHP: Người vận hành - Hướng dẫn sử dụng". Nhóm PHP. Truy cập 2021-01-30. "PHP: Operators - Manual". The PHP Group. Retrieved 2021-01-30.
  18. ^"PHP: Chuyển đổi - Hướng dẫn sử dụng". "PHP: Switch - Manual".
  19. ^Redmond, Paul. "Biểu thức kết hợp đang đến với Php 8". Laravel News. Truy cập ngày 4 tháng 10 năm 2020. Redmond, Paul. "Match Expression is Coming to PHP 8". Laravel News. Retrieved 4 October 2020.
  20. ^"Php 8.0: Biểu thức phù hợp". Php Watch. Truy cập ngày 4 tháng 10 năm 2020. "PHP 8.0: Match Expressions". PHP Watch. Retrieved 4 October 2020.
  21. ^"Cú pháp thay thế cho các cấu trúc điều khiển". Nhóm PHP. Truy cập 2010-04-16. "Alternative syntax for control structures". The PHP Group. Retrieved 2010-04-16.
  22. ^"PHP: Ngoại lệ - Hướng dẫn sử dụng". Nhóm PHP. Truy cập 2021-01-30. "PHP: Exceptions - Manual". The PHP Group. Retrieved 2021-01-30.
  23. ^ ab "loại". Nhóm PHP. Truy cập 2008-03-16.a b "Types". The PHP Group. Retrieved 2008-03-16.
  24. ^"Booleans". Nhóm PHP. Truy cập 2021-01-22. "Booleans". The PHP Group. Retrieved 2021-01-22.
  25. ^PHP: Số nguyên - Hướng dẫn sử dụng PHP: Integers - Manual
  26. ^"Số điểm nổi". Nhóm PHP. Truy cập 2021-01-22. "Floating point numbers". The PHP Group. Retrieved 2021-01-22.
  27. ^"Chuỗi". Nhóm PHP. Truy cập 2008-03-21. "Strings". The PHP Group. Retrieved 2008-03-21.
  28. ^"Cú pháp phức tạp (xoăn)". Nhóm PHP. Truy cập 2021-01-30. "Complex (curly) syntax". The PHP Group. Retrieved 2021-01-30.
  29. ^NULL NULL
  30. ^"Mảng". Nhóm PHP. Truy cập 2021-01-22. "Arrays". The PHP Group. Retrieved 2021-01-22.
  31. ^Php: iterables - thủ công PHP: Iterables - Manual
  32. ^PHP: Traversable - Hướng dẫn sử dụng PHP: Traversable - Manual
  33. ^PHP RFC: Liên minh các loại 2.0 PHP RFC: Union Types 2.0
  34. ^ ABC "Chức năng". Nhóm PHP. Truy cập 2008-03-16.a b c "Functions". The PHP Group. Retrieved 2008-03-16.
  35. ^"Php 6 đã bỏ các mặt hàng". Nhóm PHP. Truy cập 2009-01-09. "PHP 6 Dropped Items". The PHP Group. Retrieved 2009-01-09.
  36. ^"Cú pháp tôi nhớ trong PHP". Stanislav Malyshev, Zend Technologies, Ltd. Truy cập 2009-01-09. "Syntax I Miss in PHP". Stanislav Malyshev, Zend Technologies, Ltd. Retrieved 2009-01-09.
  37. ^"Php bỏ qua và được đặt tên tham số". SEO Egghead Inc. Truy cập 2009-01-09. "PHP Skipped and Named Parameters". SEO Egghead Inc. Retrieved 2009-01-09.
  38. ^"PHP: Loại khai báo - Hướng dẫn sử dụng". Nhóm PHP. Truy cập 2021-02-28. "PHP: Type declarations - Manual". The PHP Group. Retrieved 2021-02-28.
  39. ^PHP RFC: Hàm mũi tên 2.0 PHP RFC: Arrow Functions 2.0
  40. ^"Lịch sử của PHP và các dự án liên quan". Nhóm PHP. Truy cập 2008-02-25. "History of PHP and related projects". The PHP Group. Retrieved 2008-02-25.
  41. ^ AB "Php 5 Tài liệu tham khảo đối tượng". mjtsai. Truy cập 2008-03-16.a b "PHP 5 Object References". mjtsai. Retrieved 2008-03-16.
  42. ^"Các lớp và đối tượng (Php 5)". Nhóm PHP. Truy cập 2008-03-16. "Classes and Objects (PHP 5)". The PHP Group. Retrieved 2008-03-16.
  43. ^"Nhân bản đối tượng". Nhóm PHP. Truy cập 2008-03-16. "Object cloning". The PHP Group. Retrieved 2008-03-16.