Php lấy tất cả các khóa bài

Trong ví dụ này, bạn sẽ học php lấy tất cả các khóa của mảng bắt đầu bằng một chuỗi nhất định. đó là ví dụ đơn giản về bộ lọc mảng php chỉ một số khóa nhất định. chúng tôi sẽ giúp bạn đưa ra ví dụ về việc lấy giá trị tất cả các khóa bắt đầu bằng mảng php chuỗi nhất định. đó là ví dụ đơn giản về mảng php array_filter. Hãy xem ví dụ dưới đây mảng php lấy tất cả các khóa bắt đầu bằng một chuỗi nhất định

tôi sẽ cho bạn hai ví dụ ở đây

chúng ta hãy xem từng người một

ví dụ 1

$myArray = [

'hd-1' => 'One',

'hd-2' => 'Two',

'3' => 'Three',

'hd-4' => 'Four',

];

$result = [];

$startWith = 'hd';

foreach($myArray as $key => $value){

$exp_key = explode('-', $key);

if($exp_key[0] == $startWith){

$result[] = $value;

}

}

print_r($result);

?>

đầu ra

Array

(

[0] => One

[1] => Two

[2] => Four

)

ví dụ 2

$myArray = [

'hd-1' => 'One',

'hd-2' => 'Two',

'3' => 'Three',

'hd-4' => 'Four',

];

$resultArray = array_filter($myArray, function($key) {

return strpos($key, 'hd-') === 0;

}, ARRAY_FILTER_USE_KEY);

print_r($resultArray);

?>

đầu ra

Array

(

[0] => One

[1] => Two

[2] => Four

)

Tôi hy vọng nó có thể giúp bạn

PHP làm cho việc xây dựng một hệ thống dựa trên web trở nên tương đối dễ dàng, đó là lý do khiến nó trở nên phổ biến. Nhưng mặc dù dễ sử dụng, PHP đã phát triển thành một ngôn ngữ khá phức tạp, với nhiều sắc thái và sự tinh tế có thể khiến các nhà phát triển khó chịu, dẫn đến hàng giờ gỡ lỗi khó hiểu. Bài viết này nhấn mạnh 10 lỗi phổ biến hơn mà các nhà phát triển PHP cần lưu ý

Qua

Ilya Sanosian

Ilya là nhà tư vấn CNTT, kiến ​​trúc web và quản lý với hơn 12 năm kinh nghiệm xây dựng và lãnh đạo các nhóm

CHIA SẺ

CHIA SẺ

PHP làm cho việc xây dựng một hệ thống dựa trên web trở nên tương đối dễ dàng, đó là lý do khiến nó trở nên phổ biến. Nhưng mặc dù dễ sử dụng, PHP đã phát triển thành một ngôn ngữ khá phức tạp với nhiều khuôn khổ, sắc thái và sự tinh tế có thể khiến các nhà phát triển khó chịu, dẫn đến hàng giờ gỡ lỗi khó hiểu. Bài viết này nhấn mạnh 10 lỗi phổ biến hơn mà các nhà phát triển PHP cần lưu ý

Sai lầm thường gặp #1. Để lại các tham chiếu mảng lơ lửng sau vòng lặp $data = fetchRecordFromStorage($storage, $identifier); if (!isset($data['keyShouldBeSet']) { // do something here if 'keyShouldBeSet' is not set } 5

Bạn không chắc cách sử dụng vòng lặp foreach trong PHP? . Ví dụ

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)

Vấn đề là, nếu bạn không cẩn thận, điều này cũng có thể gây ra một số tác dụng phụ và hậu quả không mong muốn. Cụ thể, trong ví dụ trên, sau khi mã được thực thi,

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
7 sẽ vẫn nằm trong phạm vi và sẽ giữ tham chiếu đến phần tử cuối cùng trong mảng. Do đó, các hoạt động tiếp theo liên quan đến
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
7 có thể vô tình sửa đổi phần tử cuối cùng trong mảng

Điều chính cần nhớ là

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
5 không tạo phạm vi. Do đó,
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
7 trong ví dụ trên là một tham chiếu trong phạm vi trên cùng của tập lệnh. Trên mỗi lần lặp lại,
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
5 đặt tham chiếu để trỏ đến phần tử tiếp theo của

Array

(

[0] => One

[1] => Two

[2] => Four

)

22. Do đó, sau khi vòng lặp hoàn thành,
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
7 vẫn trỏ đến phần tử cuối cùng của

Array

(

[0] => One

[1] => Two

[2] => Four

)

22 và vẫn nằm trong phạm vi

Đây là một ví dụ về loại lỗi lảng tránh và khó hiểu mà điều này có thể dẫn đến

Array

(

[0] => One

[1] => Two

[2] => Four

)

5

Đoạn mã trên sẽ xuất ra như sau

Array

(

[0] => One

[1] => Two

[2] => Four

)

6

Không, đó không phải là một lỗi đánh máy. Giá trị cuối cùng trên dòng cuối cùng thực sự là 2, không phải 3

Tại sao?

Sau khi đi qua vòng lặp

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
5 đầu tiên,

Array

(

[0] => One

[1] => Two

[2] => Four

)

22 vẫn không thay đổi nhưng, như đã giải thích ở trên,
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
7 được để lại như một tham chiếu lơ lửng đến phần tử cuối cùng trong

Array

(

[0] => One

[1] => Two

[2] => Four

)

22 (vì vòng lặp
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
5 đó được truy cập
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
7 bằng tham chiếu)

Kết quả là, khi chúng ta đi qua vòng lặp

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
5 thứ hai, "điều kỳ lạ" dường như xảy ra. Cụ thể, vì
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
7 hiện đang được truy cập theo giá trị (i. e. , bằng bản sao),
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
5 sao chép từng phần tử

Array

(

[0] => One

[1] => Two

[2] => Four

)

22 tuần tự vào
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
7 trong mỗi bước của vòng lặp. Kết quả là, đây là những gì xảy ra trong mỗi bước của vòng lặp
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
5 thứ hai

  • vượt qua 1. Bản sao

    $myArray = [

    'hd-1' => 'One',

    'hd-2' => 'Two',

    '3' => 'Three',

    'hd-4' => 'Four',

    ];

    $resultArray = array_filter($myArray, function($key) {

    return strpos($key, 'hd-') === 0;

    }, ARRAY_FILTER_USE_KEY);

    print_r($resultArray);

    ?>

    97 (tôi. e. , “1”) thành
    $data = fetchRecordFromStorage($storage, $identifier);
    if (!isset($data['keyShouldBeSet']) {
        // do something here if 'keyShouldBeSet' is not set
    }
    
    7 (là tham chiếu đến

    $myArray = [

    'hd-1' => 'One',

    'hd-2' => 'Two',

    '3' => 'Three',

    'hd-4' => 'Four',

    ];

    $resultArray = array_filter($myArray, function($key) {

    return strpos($key, 'hd-') === 0;

    }, ARRAY_FILTER_USE_KEY);

    print_r($resultArray);

    ?>

    99), vì vậy giờ đây

    $myArray = [

    'hd-1' => 'One',

    'hd-2' => 'Two',

    '3' => 'Three',

    'hd-4' => 'Four',

    ];

    $resultArray = array_filter($myArray, function($key) {

    return strpos($key, 'hd-') === 0;

    }, ARRAY_FILTER_USE_KEY);

    print_r($resultArray);

    ?>

    99 bằng 1. Vì vậy,

    Array

    (

    [0] => One

    [1] => Two

    [2] => Four

    )

    22 hiện chứa [1, 2, 1]
  • vượt qua 2. Bản sao

    Array

    (

    [0] => One

    [1] => Two

    [2] => Four

    )

    42 (tôi. e. , “2”) thành
    $data = fetchRecordFromStorage($storage, $identifier);
    if (!isset($data['keyShouldBeSet']) {
        // do something here if 'keyShouldBeSet' is not set
    }
    
    7 (là tham chiếu đến

    $myArray = [

    'hd-1' => 'One',

    'hd-2' => 'Two',

    '3' => 'Three',

    'hd-4' => 'Four',

    ];

    $resultArray = array_filter($myArray, function($key) {

    return strpos($key, 'hd-') === 0;

    }, ARRAY_FILTER_USE_KEY);

    print_r($resultArray);

    ?>

    99), do đó, giờ đây

    $myArray = [

    'hd-1' => 'One',

    'hd-2' => 'Two',

    '3' => 'Three',

    'hd-4' => 'Four',

    ];

    $resultArray = array_filter($myArray, function($key) {

    return strpos($key, 'hd-') === 0;

    }, ARRAY_FILTER_USE_KEY);

    print_r($resultArray);

    ?>

    99 bằng 2. Vì vậy,

    Array

    (

    [0] => One

    [1] => Two

    [2] => Four

    )

    22 hiện chứa [1, 2, 2]
  • vượt qua 3. Sao chép ________ 299 (hiện là “2”) thành
    $data = fetchRecordFromStorage($storage, $identifier);
    if (!isset($data['keyShouldBeSet']) {
        // do something here if 'keyShouldBeSet' is not set
    }
    
    7 (tham chiếu đến ________ 299), vì vậy ________ 299 vẫn bằng 2. Vì vậy,

    Array

    (

    [0] => One

    [1] => Two

    [2] => Four

    )

    22 hiện chứa [1, 2, 2]

Để vẫn nhận được lợi ích của việc sử dụng các tham chiếu trong vòng lặp

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
5 mà không gặp rủi ro về các loại sự cố này, hãy gọi
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
53 trên biến, ngay sau vòng lặp
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
5, để xóa tham chiếu; . g

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
7

Sai lầm thường gặp #2. Hiểu lầm hành vi $data = fetchRecordFromStorage($storage, $identifier); if (!isset($data['keyShouldBeSet']) { // do something here if 'keyShouldBeSet' is not set } 55

Mặc dù tên của nó, nhưng

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
55 không chỉ trả về false nếu một mục không tồn tại mà còn trả về
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
57 cho các giá trị
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
58

Hành vi này có nhiều vấn đề hơn so với lúc đầu và là nguyên nhân phổ biến của các vấn đề

Hãy xem xét những điều sau đây

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}

Tác giả của mã này có lẽ muốn kiểm tra xem

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
59 có được đặt trong
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
40 không. Tuy nhiên, như đã thảo luận,
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
41 cũng sẽ trả về false nếu
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
42 được đặt, nhưng được đặt thành
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
58. Vì vậy, logic trên là thiếu sót

Đây là một ví dụ khác

Array

(

[0] => One

[1] => Two

[2] => Four

)

2

Đoạn mã trên giả định rằng nếu

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
44 trả về
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
45, thì
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
46 nhất thiết phải được đặt và do đó,
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
47 sẽ trả về
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
45. Vì vậy, ngược lại, đoạn mã trên giả định rằng cách duy nhất mà
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
47 sẽ trả về
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
57 là nếu
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
44 cũng trả lại
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
57

Không

Như đã giải thích,

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
47 cũng sẽ trả về
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
57 nếu

Array

(

[0] => One

[1] => Two

[2] => Four

)

505 được đặt thành
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
58. Do đó, có thể cho
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
47 trả lại
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
57 ngay cả khi
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
44 trả lại
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
45. Vì vậy, một lần nữa, logic trên là thiếu sót

Và nhân tiện, như một điểm phụ, nếu mục đích trong đoạn mã trên thực sự là kiểm tra lại xem

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
44 có trả về đúng hay không, thì dựa vào
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
55 vì đây là một quyết định viết mã kém trong mọi trường hợp. Thay vào đó, sẽ tốt hơn nếu chỉ kiểm tra lại
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
44; . e

$myArray = [

'hd-1' => 'One',

'hd-2' => 'Two',

'3' => 'Three',

'hd-4' => 'Four',

];

$resultArray = array_filter($myArray, function($key) {

return strpos($key, 'hd-') === 0;

}, ARRAY_FILTER_USE_KEY);

print_r($resultArray);

?>

9

Tuy nhiên, đối với các trường hợp, điều quan trọng là phải kiểm tra xem một biến có thực sự được đặt hay không (i. e. , để phân biệt giữa một biến không được đặt và một biến được đặt thành

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
58), phương pháp

Array

(

[0] => One

[1] => Two

[2] => Four

)

515 là một giải pháp hiệu quả hơn nhiều

Ví dụ: chúng ta có thể viết lại ví dụ đầu tiên trong hai ví dụ trên như sau

Array

(

[0] => One

[1] => Two

[2] => Four

)

4

Hơn nữa, bằng cách kết hợp

Array

(

[0] => One

[1] => Two

[2] => Four

)

515 với

Array

(

[0] => One

[1] => Two

[2] => Four

)

517, chúng tôi có thể kiểm tra một cách đáng tin cậy liệu một biến trong phạm vi hiện tại đã được đặt hay chưa

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
5

Sai lầm thường gặp #3. Nhầm lẫn về việc trả lại theo tham chiếu so với. theo giá trị

Hãy xem xét đoạn mã này

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
4

Nếu bạn chạy đoạn mã trên, bạn sẽ nhận được như sau

Array

(

[0] => One

[1] => Two

[2] => Four

)

50

Chuyện gì vậy?

Vấn đề là đoạn mã trên nhầm lẫn việc trả về mảng theo tham chiếu với việc trả về mảng theo giá trị. Trừ khi bạn yêu cầu PHP trả về một mảng theo tham chiếu (i. e. , bằng cách sử dụng

Array

(

[0] => One

[1] => Two

[2] => Four

)

518), theo mặc định, PHP sẽ trả về mảng “theo giá trị”. Điều này có nghĩa là một bản sao của mảng sẽ được trả về và do đó, hàm được gọi và người gọi sẽ không truy cập cùng một thể hiện của mảng

Vì vậy, lệnh gọi

Array

(

[0] => One

[1] => Two

[2] => Four

)

519 ở trên trả về một bản sao của mảng

Array

(

[0] => One

[1] => Two

[2] => Four

)

520 chứ không phải là một tham chiếu đến nó. Với ý nghĩ đó, chúng ta hãy xem lại hai dòng chính từ ví dụ trên

Array

(

[0] => One

[1] => Two

[2] => Four

)

51

Một cách khắc phục có thể là lưu bản sao đầu tiên của mảng

Array

(

[0] => One

[1] => Two

[2] => Four

)

520 được trả về bởi

Array

(

[0] => One

[1] => Two

[2] => Four

)

519 và sau đó thao tác trên bản sao đó; . g

Array

(

[0] => One

[1] => Two

[2] => Four

)

52

Mã đó sẽ hoạt động tốt (tôi. e. , nó sẽ xuất ra

Array

(

[0] => One

[1] => Two

[2] => Four

)

523 mà không tạo bất kỳ thông báo "chỉ mục không xác định" nào), nhưng tùy thuộc vào những gì bạn đang cố gắng hoàn thành, cách tiếp cận này có thể phù hợp hoặc không. Cụ thể, đoạn mã trên sẽ không sửa đổi mảng

Array

(

[0] => One

[1] => Two

[2] => Four

)

520 ban đầu. Vì vậy, nếu bạn muốn các sửa đổi của mình (chẳng hạn như thêm phần tử 'kiểm tra') ảnh hưởng đến mảng ban đầu, thay vào đó, bạn cần sửa đổi hàm

Array

(

[0] => One

[1] => Two

[2] => Four

)

519 để trả về một tham chiếu đến chính mảng

Array

(

[0] => One

[1] => Two

[2] => Four

)

520. Điều này được thực hiện bằng cách thêm một

Array

(

[0] => One

[1] => Two

[2] => Four

)

518 trước tên hàm, do đó chỉ ra rằng nó sẽ trả về một tham chiếu; . e

Array

(

[0] => One

[1] => Two

[2] => Four

)

53

Đầu ra của điều này sẽ là

Array

(

[0] => One

[1] => Two

[2] => Four

)

523, như mong đợi

Nhưng để làm cho mọi thứ trở nên khó hiểu hơn, thay vào đó hãy xem xét đoạn mã sau

Array

(

[0] => One

[1] => Two

[2] => Four

)

54

Nếu bạn đoán rằng điều này sẽ dẫn đến lỗi “chỉ mục không xác định” giống như ví dụ về

Array

(

[0] => One

[1] => Two

[2] => Four

)

529 trước đó của chúng tôi, thì bạn đã nhầm. Trên thực tế, mã này sẽ hoạt động tốt. Lý do là, không giống như mảng, PHP luôn chuyển các đối tượng theo tham chiếu. (

Array

(

[0] => One

[1] => Two

[2] => Four

)

530 là một đối tượng SPL, bắt chước hoàn toàn cách sử dụng mảng, nhưng hoạt động như một đối tượng. )

Như những ví dụ này chứng minh, không phải lúc nào PHP cũng hoàn toàn rõ ràng cho dù bạn đang xử lý một bản sao hay một tài liệu tham khảo. Do đó, điều cần thiết là phải hiểu những hành vi mặc định này (i. e. , biến và mảng được truyền theo giá trị;

Tất cả những gì đã nói, điều quan trọng cần lưu ý là việc trả về một tham chiếu đến một mảng hoặc một

Array

(

[0] => One

[1] => Two

[2] => Four

)

530 nói chung là điều nên tránh, vì nó cung cấp cho người gọi khả năng sửa đổi dữ liệu riêng tư của cá thể. Điều này “bay vào mặt” của sự đóng gói. Thay vào đó, tốt hơn là sử dụng "getters" và "setters" kiểu cũ, e. g

Array

(

[0] => One

[1] => Two

[2] => Four

)

55

Cách tiếp cận này cung cấp cho người gọi khả năng đặt hoặc nhận bất kỳ giá trị nào trong mảng mà không cung cấp quyền truy cập công khai vào chính mảng

Array

(

[0] => One

[1] => Two

[2] => Four

)

520 riêng tư

Sai lầm thường gặp #4. Thực hiện các truy vấn trong một vòng lặp

Không có gì lạ khi gặp phải trường hợp như thế này nếu PHP của bạn không hoạt động

Array

(

[0] => One

[1] => Two

[2] => Four

)

56

Mặc dù có thể hoàn toàn không có gì sai ở đây, nhưng nếu bạn làm theo logic trong mã, bạn có thể thấy rằng lệnh gọi có vẻ vô hại ở trên tới

Array

(

[0] => One

[1] => Two

[2] => Four

)

533 cuối cùng dẫn đến một loại truy vấn nào đó, chẳng hạn như

Array

(

[0] => One

[1] => Two

[2] => Four

)

57

Do đó, mỗi lần lặp lại của vòng lặp trên sẽ dẫn đến một truy vấn riêng tới cơ sở dữ liệu. Vì vậy, ví dụ: nếu bạn đã cung cấp một mảng gồm 1.000 giá trị cho vòng lặp, thì nó sẽ tạo ra 1.000 truy vấn riêng biệt cho tài nguyên. Nếu một tập lệnh như vậy được gọi trong nhiều luồng, thì nó có khả năng khiến hệ thống ngừng hoạt động

Do đó, điều quan trọng là phải nhận biết khi nào mã của bạn tạo truy vấn và bất cứ khi nào có thể, hãy thu thập các giá trị rồi chạy một truy vấn để tìm nạp tất cả kết quả

Một ví dụ về một nơi khá phổ biến để gặp truy vấn được thực hiện không hiệu quả (i. e. , trong một vòng lặp) là khi một biểu mẫu được đăng với một danh sách các giá trị (ví dụ: ID). Sau đó, để truy xuất toàn bộ dữ liệu bản ghi cho từng ID, mã sẽ lặp qua mảng và thực hiện một truy vấn SQL riêng cho từng ID. Điều này thường sẽ trông giống như thế này

Array

(

[0] => One

[1] => Two

[2] => Four

)

58

Nhưng điều tương tự có thể được thực hiện hiệu quả hơn nhiều trong một truy vấn SQL như sau

Array

(

[0] => One

[1] => Two

[2] => Four

)

59

Do đó, điều quan trọng là phải nhận biết khi nào các truy vấn được thực hiện, trực tiếp hoặc gián tiếp, bằng mã của bạn. Bất cứ khi nào có thể, hãy thu thập các giá trị rồi chạy một truy vấn để tìm nạp tất cả các kết quả. Tuy nhiên, cũng cần phải thận trọng, điều này dẫn chúng ta đến lỗi PHP phổ biến tiếp theo…

Sai lầm thường gặp #5. Sử dụng bộ nhớ giả mạo và không hiệu quả

Mặc dù tìm nạp nhiều bản ghi cùng một lúc chắc chắn hiệu quả hơn chạy một truy vấn duy nhất cho mỗi hàng để tìm nạp, nhưng cách tiếp cận như vậy có khả năng dẫn đến tình trạng “hết bộ nhớ” trong

Array

(

[0] => One

[1] => Two

[2] => Four

)

534 khi sử dụng tiện ích mở rộng

Array

(

[0] => One

[1] => Two

[2] => Four

)

535 của PHP

Để chứng minh, chúng ta hãy xem một hộp thử nghiệm với tài nguyên hạn chế (RAM 512MB), MySQL và

Array

(

[0] => One

[1] => Two

[2] => Four

)

536

Chúng tôi sẽ khởi động một bảng cơ sở dữ liệu như thế này

Array

(

[0] => One

[1] => Two

[2] => Four

)

60

OK, bây giờ hãy kiểm tra việc sử dụng tài nguyên

Array

(

[0] => One

[1] => Two

[2] => Four

)

61

đầu ra

Array

(

[0] => One

[1] => Two

[2] => Four

)

62

Mát mẻ. Có vẻ như truy vấn được quản lý nội bộ an toàn về mặt tài nguyên

Tuy nhiên, để chắc chắn, hãy tăng giới hạn một lần nữa và đặt nó thành 100.000. Uh-oh. Khi chúng tôi làm điều đó, chúng tôi nhận được

Array

(

[0] => One

[1] => Two

[2] => Four

)

63

Chuyện gì đã xảy ra thế?

Vấn đề ở đây là cách thức hoạt động của mô-đun

Array

(

[0] => One

[1] => Two

[2] => Four

)

535 của PHP. Nó thực sự chỉ là một proxy cho

Array

(

[0] => One

[1] => Two

[2] => Four

)

534, làm công việc bẩn thỉu. Khi một phần dữ liệu được chọn, nó sẽ chuyển trực tiếp vào bộ nhớ. Vì bộ nhớ này không được quản lý bởi trình quản lý của PHP, nên

Array

(

[0] => One

[1] => Two

[2] => Four

)

539 sẽ không hiển thị bất kỳ sự gia tăng nào trong việc sử dụng tài nguyên khi chúng tôi tăng giới hạn trong truy vấn của mình. Điều này dẫn đến các vấn đề giống như vấn đề đã trình bày ở trên khi chúng ta bị lừa khi nghĩ rằng việc quản lý bộ nhớ của chúng ta vẫn ổn. Nhưng trên thực tế, việc quản lý bộ nhớ của chúng ta bị thiếu sót nghiêm trọng và chúng ta có thể gặp các sự cố như sự cố được hiển thị ở trên

Ít nhất bạn có thể tránh được sự giả mạo ở trên (mặc dù bản thân nó sẽ không cải thiện việc sử dụng bộ nhớ của bạn) bằng cách sử dụng mô-đun

Array

(

[0] => One

[1] => Two

[2] => Four

)

540.

Array

(

[0] => One

[1] => Two

[2] => Four

)

540 được biên dịch dưới dạng một phần mở rộng PHP gốc và nó sử dụng trình quản lý bộ nhớ của PHP

Do đó, nếu chúng tôi chạy thử nghiệm trên bằng cách sử dụng

Array

(

[0] => One

[1] => Two

[2] => Four

)

540 thay vì

Array

(

[0] => One

[1] => Two

[2] => Four

)

535, chúng tôi sẽ có được bức tranh chân thực hơn nhiều về việc sử dụng bộ nhớ của chúng tôi

Array

(

[0] => One

[1] => Two

[2] => Four

)

64

Và nó thậm chí còn tệ hơn thế, nhân tiện. Theo tài liệu PHP,

Array

(

[0] => One

[1] => Two

[2] => Four

)

535 sử dụng gấp đôi tài nguyên so với

Array

(

[0] => One

[1] => Two

[2] => Four

)

540 để lưu trữ dữ liệu, do đó, tập lệnh gốc sử dụng

Array

(

[0] => One

[1] => Two

[2] => Four

)

535 thực sự đã sử dụng nhiều bộ nhớ hơn so với hiển thị ở đây (gần gấp đôi)

Để tránh những vấn đề như vậy, hãy cân nhắc giới hạn kích thước truy vấn của bạn và sử dụng vòng lặp với số lần lặp nhỏ; . g

Array

(

[0] => One

[1] => Two

[2] => Four

)

65

Khi chúng tôi xem xét cả lỗi PHP này trở lên, chúng tôi nhận ra rằng có một sự cân bằng hợp lý mà mã của bạn cần đạt được một cách lý tưởng giữa, một mặt, truy vấn của bạn quá chi tiết và lặp đi lặp lại, so với. có từng truy vấn riêng lẻ của bạn quá lớn. Như với hầu hết mọi thứ trong cuộc sống, sự cân bằng là cần thiết;

Sai lầm thường gặp #6. Bỏ qua các vấn đề về Unicode/UTF-8

Theo một nghĩa nào đó, đây thực sự là một vấn đề trong chính PHP hơn là vấn đề bạn gặp phải khi gỡ lỗi PHP, nhưng nó chưa bao giờ được giải quyết thỏa đáng. Cốt lõi của PHP 6 là nhận biết Unicode, nhưng điều đó đã bị đình trệ khi quá trình phát triển PHP 6 bị đình chỉ vào năm 2010

Nhưng điều đó không có nghĩa là không cho phép nhà phát triển chuyển giao đúng UTF-8 và tránh giả định sai lầm rằng tất cả các chuỗi nhất thiết phải là “ASCII cũ đơn giản”. Mã không thể xử lý đúng các chuỗi không phải ASCII nổi tiếng là đã đưa các lỗi heisen vào mã của bạn. Ngay cả các cuộc gọi

Array

(

[0] => One

[1] => Two

[2] => Four

)

547 đơn giản cũng có thể gây ra sự cố nếu ai đó có họ như “Schrödinger” cố gắng đăng ký vào hệ thống của bạn

Đây là một danh sách kiểm tra nhỏ để tránh những vấn đề như vậy trong mã của bạn

  • Nếu bạn không biết nhiều về Unicode và UTF-8, ít nhất bạn nên học những điều cơ bản. Có một mồi tuyệt vời ở đây
  • Đảm bảo luôn sử dụng các hàm

    Array

    (

    [0] => One

    [1] => Two

    [2] => Four

    )

    548 thay vì các hàm chuỗi cũ (đảm bảo phần mở rộng “multibyte” được bao gồm trong bản dựng PHP của bạn)
  • Đảm bảo rằng cơ sở dữ liệu và bảng của bạn được đặt để sử dụng Unicode (nhiều bản dựng của MySQL vẫn sử dụng

    Array

    (

    [0] => One

    [1] => Two

    [2] => Four

    )

    549 theo mặc định)
  • Hãy nhớ rằng

    Array

    (

    [0] => One

    [1] => Two

    [2] => Four

    )

    550 chuyển đổi các ký hiệu không phải ASCII (e. g. , “Schrödinger” trở thành “Schr\u00f6dinger”) nhưng

    Array

    (

    [0] => One

    [1] => Two

    [2] => Four

    )

    551 thì không
  • Đảm bảo các tệp mã PHP của bạn cũng được mã hóa UTF-8 để tránh xung đột khi nối các chuỗi với các hằng chuỗi được mã hóa cứng hoặc được định cấu hình

Một tài nguyên đặc biệt có giá trị về vấn đề này là Bài viết UTF-8 Primer cho PHP và MySQL của Francisco Claria trên blog này

Sai lầm thường gặp #7. Giả sử Array( [0] => One [1] => Two [2] => Four)552 sẽ luôn chứa dữ liệu POST của bạn

Mặc dù có tên như vậy, nhưng mảng

Array

(

[0] => One

[1] => Two

[2] => Four

)

552 không phải lúc nào cũng chứa dữ liệu POST của bạn và có thể dễ dàng thấy trống. Để hiểu điều này, chúng ta hãy xem một ví dụ. Giả sử chúng tôi thực hiện yêu cầu máy chủ với cuộc gọi

Array

(

[0] => One

[1] => Two

[2] => Four

)

554 như sau

Array

(

[0] => One

[1] => Two

[2] => Four

)

66

(Nhân tiện, lưu ý

Array

(

[0] => One

[1] => Two

[2] => Four

)

555 ở đây. Chúng tôi gửi dữ liệu dưới dạng JSON, khá phổ biến đối với API. Ví dụ, đó là mặc định để đăng trong dịch vụ AngularJS

Array

(

[0] => One

[1] => Two

[2] => Four

)

556. )

Về phía máy chủ trong ví dụ của chúng tôi, chúng tôi chỉ cần kết xuất mảng

Array

(

[0] => One

[1] => Two

[2] => Four

)

552

Array

(

[0] => One

[1] => Two

[2] => Four

)

67

Thật ngạc nhiên, kết quả sẽ là

Array

(

[0] => One

[1] => Two

[2] => Four

)

68

Tại sao?

Câu trả lời là PHP chỉ tự động phân tích cú pháp tải trọng POST khi nó có loại nội dung là

Array

(

[0] => One

[1] => Two

[2] => Four

)

559 hoặc

Array

(

[0] => One

[1] => Two

[2] => Four

)

560. Lý do cho điều này là do lịch sử - hai loại nội dung này về cơ bản là những loại duy nhất được sử dụng nhiều năm trước khi

Array

(

[0] => One

[1] => Two

[2] => Four

)

552 của PHP được triển khai. Vì vậy, với bất kỳ loại nội dung nào khác (ngay cả những loại khá phổ biến hiện nay, như ________ 1562), PHP không tự động tải trọng tải POST

Array

(

[0] => One

[1] => Two

[2] => Four

)

552 là một siêu toàn cầu, nếu chúng ta ghi đè lên nó một lần (tốt nhất là ở phần đầu trong tập lệnh của chúng ta), giá trị đã sửa đổi (i. e. , bao gồm tải trọng POST) sau đó sẽ được tham chiếu trong toàn bộ mã của chúng tôi. Điều này rất quan trọng vì

Array

(

[0] => One

[1] => Two

[2] => Four

)

552 thường được sử dụng bởi các khung công tác PHP và hầu hết tất cả các tập lệnh tùy chỉnh để trích xuất và chuyển đổi dữ liệu yêu cầu

Vì vậy, ví dụ: khi xử lý tải trọng POST có loại nội dung là

Array

(

[0] => One

[1] => Two

[2] => Four

)

562, chúng tôi cần phân tích cú pháp nội dung yêu cầu theo cách thủ công (i. e. , giải mã dữ liệu JSON) và ghi đè biến

Array

(

[0] => One

[1] => Two

[2] => Four

)

552, như sau

Array

(

[0] => One

[1] => Two

[2] => Four

)

69

Sau đó, khi chúng tôi kết xuất mảng

Array

(

[0] => One

[1] => Two

[2] => Four

)

552, chúng tôi thấy rằng nó bao gồm chính xác tải trọng POST; . g

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
70

Sai lầm thường gặp #8. Nghĩ rằng PHP hỗ trợ kiểu dữ liệu ký tự

Nhìn vào đoạn mã mẫu này và thử đoán xem nó sẽ in gì

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
71

Nếu bạn trả lời từ 'a' đến 'z', bạn có thể ngạc nhiên khi biết rằng mình đã sai

Có, nó sẽ in từ 'a' đến 'z', nhưng sau đó nó cũng sẽ in từ 'aa' đến 'yz'. Hãy xem tại sao

Trong PHP không có kiểu dữ liệu

Array

(

[0] => One

[1] => Two

[2] => Four

)

568; . Với ý nghĩ đó, việc tăng

Array

(

[0] => One

[1] => Two

[2] => Four

)

569

Array

(

[0] => One

[1] => Two

[2] => Four

)

571 trong PHP mang lại

Array

(

[0] => One

[1] => Two

[2] => Four

)

572

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
72

Tuy nhiên, để gây nhầm lẫn hơn nữa,

Array

(

[0] => One

[1] => Two

[2] => Four

)

572 về mặt từ điển ít hơn

Array

(

[0] => One

[1] => Two

[2] => Four

)

571

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
73

Đó là lý do tại sao mã mẫu được trình bày ở trên in các chữ cái từ

Array

(

[0] => One

[1] => Two

[2] => Four

)

575 đến

Array

(

[0] => One

[1] => Two

[2] => Four

)

571, nhưng sau đó cũng in ra từ

Array

(

[0] => One

[1] => Two

[2] => Four

)

572 đến

Array

(

[0] => One

[1] => Two

[2] => Four

)

578. Nó dừng khi đạt đến ________ 1579, đây là giá trị đầu tiên nó gặp mà nó “lớn hơn” ________ 1571

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
74

Trong trường hợp đó, đây là một cách để lặp đúng các giá trị từ 'a' đến 'z' trong PHP

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
75

Hay cách khác

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
76

Sai lầm thường gặp #9. Bỏ qua các tiêu chuẩn mã hóa

Mặc dù bỏ qua các tiêu chuẩn mã hóa không trực tiếp dẫn đến việc cần phải gỡ lỗi mã PHP, nhưng đây có lẽ vẫn là một trong những điều quan trọng nhất cần thảo luận ở đây

Bỏ qua các tiêu chuẩn mã hóa có thể gây ra hàng loạt vấn đề cho một dự án. Tốt nhất, nó dẫn đến mã không nhất quán (vì mọi nhà phát triển đều “làm việc của riêng họ”). Nhưng tệ nhất, nó tạo ra mã PHP không hoạt động hoặc có thể khó điều hướng (đôi khi gần như không thể), khiến việc gỡ lỗi, nâng cao, bảo trì trở nên cực kỳ khó khăn. Và điều đó có nghĩa là giảm năng suất cho nhóm của bạn, bao gồm rất nhiều nỗ lực lãng phí (hoặc ít nhất là không cần thiết)

May mắn thay cho các nhà phát triển PHP, có Khuyến nghị về Tiêu chuẩn PHP (PSR), bao gồm năm tiêu chuẩn sau

  • PSR-0. Tiêu chuẩn tự động tải
  • PSR-1. Tiêu chuẩn mã hóa cơ bản
  • PSR-2. Hướng dẫn phong cách mã hóa
  • PSR-3. Giao diện nhật ký
  • PSR-4. Trình tải tự động

PSR ban đầu được tạo ra dựa trên đầu vào từ những người bảo trì các nền tảng được công nhận nhất trên thị trường. Zend, Drupal, Symfony, Joomla và những người khác đã đóng góp cho các tiêu chuẩn này và hiện đang tuân theo chúng. Ngay cả PEAR, đã cố gắng trở thành một tiêu chuẩn trong nhiều năm trước đó, giờ cũng tham gia vào PST

Theo một nghĩa nào đó, tiêu chuẩn mã hóa của bạn là gì hầu như không quan trọng, miễn là bạn đồng ý với một tiêu chuẩn và tuân theo nó, nhưng tuân theo PSR nói chung là một ý tưởng hay trừ khi bạn có một số lý do thuyết phục về dự án của mình để làm khác đi. Ngày càng có nhiều nhóm và dự án tuân thủ PSR. Tại thời điểm này, Tt chắc chắn được công nhận là “tiêu chuẩn” của phần lớn các nhà phát triển PHP, vì vậy việc sử dụng nó sẽ giúp đảm bảo rằng các nhà phát triển mới quen thuộc và thoải mái với tiêu chuẩn viết mã của bạn khi họ tham gia nhóm của bạn.

Sai lầm thường gặp #10. Lạm dụng Array( [0] => One [1] => Two [2] => Four)581

Một số nhà phát triển PHP thích sử dụng

Array

(

[0] => One

[1] => Two

[2] => Four

)

581 để kiểm tra boolean cho mọi thứ. Tuy nhiên, có trường hợp điều này có thể dẫn đến nhầm lẫn

Trước tiên, hãy quay lại mảng và các phiên bản

Array

(

[0] => One

[1] => Two

[2] => Four

)

530 (bắt chước mảng). Với sự giống nhau của chúng, thật dễ dàng để giả định rằng các mảng và thực thể

Array

(

[0] => One

[1] => Two

[2] => Four

)

530 sẽ hoạt động giống hệt nhau. Tuy nhiên, điều này chứng tỏ là một giả định nguy hiểm. Ví dụ, trong PHP 5. 0

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
77

Và để làm cho vấn đề trở nên tồi tệ hơn, kết quả sẽ khác trước PHP 5. 0

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
78

Thật không may, cách tiếp cận này khá phổ biến. Ví dụ: đây là cách

Array

(

[0] => One

[1] => Two

[2] => Four

)

585 của Zend Framework 2 trả về dữ liệu khi gọi

Array

(

[0] => One

[1] => Two

[2] => Four

)

586 trên kết quả

Array

(

[0] => One

[1] => Two

[2] => Four

)

587 như tài liệu gợi ý. Nhà phát triển có thể dễ dàng trở thành nạn nhân của lỗi này với dữ liệu đó

Để tránh những vấn đề này, cách tiếp cận tốt hơn để kiểm tra cấu trúc mảng trống là sử dụng

Array

(

[0] => One

[1] => Two

[2] => Four

)

588

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
79

Và tình cờ thay, vì PHP ép kiểu

Array

(

[0] => One

[1] => Two

[2] => Four

)

589 thành
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
57, nên

Array

(

[0] => One

[1] => Two

[2] => Four

)

588 cũng có thể được sử dụng trong điều kiện

Array

(

[0] => One

[1] => Two

[2] => Four

)

592 để kiểm tra các mảng trống. Cũng cần lưu ý rằng, trong PHP,

Array

(

[0] => One

[1] => Two

[2] => Four

)

588 là độ phức tạp không đổi (hoạt động _______1594) trên các mảng, điều này càng làm rõ ràng hơn rằng đó là lựa chọn đúng đắn

Một ví dụ khác khi

Array

(

[0] => One

[1] => Two

[2] => Four

)

581 có thể nguy hiểm là khi kết hợp nó với hàm lớp phép thuật

Array

(

[0] => One

[1] => Two

[2] => Four

)

596. Hãy xác định hai lớp và có thuộc tính

Array

(

[0] => One

[1] => Two

[2] => Four

)

523 trong cả hai

Trước tiên, hãy định nghĩa một lớp

Array

(

[0] => One

[1] => Two

[2] => Four

)

598 bao gồm

Array

(

[0] => One

[1] => Two

[2] => Four

)

523 như một thuộc tính bình thường

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
0

Sau đó, hãy định nghĩa một lớp

Array

(

[0] => One

[1] => Two

[2] => Four

)

600 sử dụng toán tử

Array

(

[0] => One

[1] => Two

[2] => Four

)

596 ma thuật để truy cập thuộc tính

Array

(

[0] => One

[1] => Two

[2] => Four

)

523 của nó

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
1

OK, bây giờ hãy xem điều gì sẽ xảy ra khi chúng ta cố gắng truy cập thuộc tính

Array

(

[0] => One

[1] => Two

[2] => Four

)

523 của mỗi lớp này

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
2

Tốt cho đến nay

Nhưng bây giờ hãy xem điều gì sẽ xảy ra khi chúng ta gọi

Array

(

[0] => One

[1] => Two

[2] => Four

)

581 trên mỗi trong số này

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
3

ừ. Vì vậy, nếu chúng ta dựa vào

Array

(

[0] => One

[1] => Two

[2] => Four

)

581, chúng ta có thể bị nhầm lẫn khi tin rằng thuộc tính

Array

(

[0] => One

[1] => Two

[2] => Four

)

523 của

Array

(

[0] => One

[1] => Two

[2] => Four

)

607 trống, trong khi trên thực tế, nó được đặt thành

Array

(

[0] => One

[1] => Two

[2] => Four

)

608

Thật không may, nếu một lớp sử dụng hàm

Array

(

[0] => One

[1] => Two

[2] => Four

)

596 ma thuật để truy xuất giá trị của thuộc tính, thì không có cách nào dễ dàng để kiểm tra xem giá trị thuộc tính đó có trống hay không. Bên ngoài phạm vi của lớp, bạn thực sự chỉ có thể kiểm tra xem giá trị
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
58 có được trả về hay không và điều đó không nhất thiết có nghĩa là khóa tương ứng không được đặt, vì nó thực sự có thể được đặt thành
$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
58

Ngược lại, nếu chúng ta cố gắng tham chiếu một thuộc tính không tồn tại của một thể hiện lớp

Array

(

[0] => One

[1] => Two

[2] => Four

)

598, chúng ta sẽ nhận được một thông báo tương tự như sau

$data = fetchRecordFromStorage($storage, $identifier);
if (!isset($data['keyShouldBeSet']) {
    // do something here if 'keyShouldBeSet' is not set
}
4

Vì vậy, điểm chính ở đây là phương pháp

Array

(

[0] => One

[1] => Two

[2] => Four

)

581 nên được sử dụng cẩn thận vì nó có thể gây nhầm lẫn - hoặc thậm chí có khả năng gây hiểu lầm - kết quả, nếu không cẩn thận

Gói (lại

Tính dễ sử dụng của PHP có thể ru ngủ các nhà phát triển vào một cảm giác thoải mái sai lầm, khiến họ dễ bị gỡ lỗi PHP trong thời gian dài do một số sắc thái và đặc điểm riêng của ngôn ngữ. Điều này có thể dẫn đến việc PHP không hoạt động và các vấn đề như được mô tả ở đây

Ngôn ngữ PHP đã phát triển đáng kể trong suốt lịch sử 20 năm của nó. Tự làm quen với sự tinh tế của nó là một nỗ lực đáng giá, vì nó sẽ giúp đảm bảo rằng phần mềm bạn sản xuất có khả năng mở rộng, mạnh mẽ và dễ bảo trì hơn

thẻ

PHP

Người làm việc tự do? Tìm công việc tiếp theo của bạn.

Việc làm Lập trình viên PHP

Xem thông tin đầy đủ

Ilya Sanosian

Kỹ sư phần mềm

Giới thiệu về tác giả

Ilya là nhà tư vấn CNTT, kiến ​​trúc web và quản lý với hơn một thập kỷ kinh nghiệm xây dựng và lãnh đạo nhóm, đào tạo đồng nghiệp và giúp các quy trình hoạt động lâu dài bằng cách xây dựng quy trình công việc hiệu quả và tài liệu minh bạch. Kiến thức miền của Ilya bao gồm robot, tin tức, bảo mật trực tuyến, chăm sóc sức khỏe, tiếp thị trực tuyến và du lịch

Thuê Ilya

Bình luận

Phil nghèo

Bài viết rất hay, rất nhiều thông tin

Phil nghèo

Bài viết rất hay, rất nhiều thông tin

thebeline

Trời ạ, một số trong số này phù hợp với tôi (như các truy vấn bên trong các vòng lặp, chúng tôi thậm chí có một hoặc hai bộ [trước khi tôi viết lại chúng] các truy vấn bên trong các vòng lặp đã kích hoạt các vòng lặp tiếp theo với các truy vấn. một mớ hỗn độn thối rữa). Tuy nhiên, tôi không biết liệu tôi có nên gọi đây là 10 vấn đề phổ biến nhất hay không, cụ thể là bởi vì, trong khi những vấn đề này chắc chắn gây nhầm lẫn, các nhà phát triển thường gặp những vấn đề này và giải quyết chúng theo nhu cầu của họ một lần rồi tiếp tục. Bài viết không có lỗi, nhưng với một danh sách dài dằng dặc như PHP có, việc chọn ra chỉ 10 bài viết ngắn là điều không thể. Danh sách này thật điên rồ. http. //eev. ee/blog/2012/04/09/php-a-fractal-of-bad-design/

thebeline

Trời ạ, một số trong số này phù hợp với tôi (như các truy vấn bên trong các vòng lặp, chúng tôi thậm chí có một hoặc hai bộ [trước khi tôi viết lại chúng] các truy vấn bên trong các vòng lặp đã kích hoạt các vòng lặp tiếp theo với các truy vấn. một mớ hỗn độn thối rữa). Tuy nhiên, tôi không biết liệu tôi có nên gọi đây là 10 vấn đề phổ biến nhất hay không, cụ thể là bởi vì, trong khi những vấn đề này chắc chắn gây nhầm lẫn, các nhà phát triển thường gặp những vấn đề này và giải quyết chúng theo nhu cầu của họ một lần rồi tiếp tục. Bài viết không có lỗi, nhưng với một danh sách dài dằng dặc như PHP có, việc chọn ra chỉ 10 bài viết ngắn là điều không thể. Danh sách này thật điên rồ. http. //eev. ee/blog/2012/04/09/php-a-fractal-of-bad-design/

Alejandro Pablo Tkachuk

Top 10 tuyệt vời

Alejandro Pablo Tkachuk

Top 10 tuyệt vời

Wilhelm Murdoch

Ôi Chúa ơi. Đây là bài viết của tôi khi mọi người hỏi tôi tại sao tôi không thích ngôn ngữ này. Rõ ràng, mọi ngôn ngữ đều có những thiếu sót của nó, nhưng sau 10 năm sử dụng PHP, nó đã để lại một mùi vị rất tệ trong miệng tôi

Wilhelm Murdoch

Ôi Chúa ơi. Đây là bài viết của tôi khi mọi người hỏi tôi tại sao tôi không thích ngôn ngữ này. Rõ ràng, mọi ngôn ngữ đều có những thiếu sót của nó, nhưng sau 10 năm sử dụng PHP, nó đã để lại một mùi vị rất tệ trong miệng tôi

thợ đánh bóng

FWIW, trong #10 bạn nói "// PHP 5. 0 trở lên. $array = [];" Ký hiệu mảng đó KHÔNG hoạt động trong PHP 5. 0-5. 3, kể từ khi nó được giới thiệu trong PHP 5. 4

thợ đánh bóng

FWIW, trong #10 bạn nói "// PHP 5. 0 trở lên. $array = [];" Ký hiệu mảng đó KHÔNG hoạt động trong PHP 5. 0-5. 3, kể từ khi nó được giới thiệu trong PHP 5. 4

Bruno Seixas

Bài báo tuyệt vời. Cảm ơn =) Mỗi ​​ngày chúng ta có thể học được điều gì đó, cải thiện phong cách viết mã của mình. Điều này chỉ ra đúng hướng

Bruno Seixas

Bài báo tuyệt vời. Cảm ơn =) Mỗi ​​ngày chúng ta có thể học được điều gì đó, cải thiện phong cách viết mã của mình. Điều này chỉ ra đúng hướng

Scott

Mọi chuyện diễn ra rất suôn sẻ cho đến khi bạn đề cập đến PSR2. ừ

Scott

Mọi chuyện diễn ra rất suôn sẻ cho đến khi bạn đề cập đến PSR2. ừ

Will Haven

Bây giờ ngôn ngữ của bạn là gì?

Will Haven

Bây giờ ngôn ngữ của bạn là gì?

Vojtech Kurka

Chỉ là một cảnh báo. Khi sử dụng các mảng không trống, count($array) có thể làm chậm mã của bạn một cách đáng kể. Hơn nữa, một số nhà phát triển có xu hướng sử dụng if(count($arr)). vòng lặp bên trong. Tôi sẽ không khuyến nghị thực hành này cho các mảng

Vojtech Kurka

Chỉ là một cảnh báo. Khi sử dụng các mảng không trống, count($array) có thể làm chậm mã của bạn một cách đáng kể. Hơn nữa, một số nhà phát triển có xu hướng sử dụng if(count($arr)). vòng lặp bên trong. Tôi sẽ không khuyến nghị thực hành này cho các mảng

sương khói

Cảm ơn vì bài viết rất nhiều thông tin và tôi thích nó nhưng "Mặc dù tên của nó, isset() không chỉ trả về false nếu một mục không tồn tại mà còn trả về false cho các giá trị null. " là sai, nó trả về true nếu giá trị nếu sai và chỉ trả về false nếu giá trị là null

sương khói

Cảm ơn vì bài viết rất nhiều thông tin và tôi thích nó nhưng "Mặc dù tên của nó, isset() không chỉ trả về false nếu một mục không tồn tại mà còn trả về false cho các giá trị null. " là sai, nó trả về true nếu giá trị nếu sai và chỉ trả về false nếu giá trị là null

Maxim Naguchev

> Thật không may, nếu một lớp sử dụng hàm __get() ma thuật để truy xuất giá trị của thuộc tính, > không có cách nào dễ dàng để kiểm tra xem giá trị thuộc tính đó có trống hay không. Nó không đúng. Xây dựng empty($var) trước tiên hãy thử gọi isset() và, nếu biến được đặt, sau đó kiểm tra xem biến có trống hay không. Vì vậy, nếu lớp sử dụng phương thức ma thuật _get(), thì nó phải nhận ra phương thức ma thuật _isset(). Và trống() sẽ hoạt động bình thường

Maxim Naguchev

> Thật không may, nếu một lớp sử dụng hàm __get() ma thuật để truy xuất giá trị của thuộc tính, > không có cách nào dễ dàng để kiểm tra xem giá trị thuộc tính đó có trống hay không. Nó không đúng. Xây dựng empty($var) trước tiên hãy thử gọi isset() và, nếu biến được đặt, sau đó kiểm tra xem biến có trống hay không. Vì vậy, nếu lớp sử dụng phương thức ma thuật _get(), thì nó phải nhận ra phương thức ma thuật _isset(). Và trống() sẽ hoạt động bình thường

Myroniar

hữu ích, cảm ơn

Myroniar

hữu ích, cảm ơn

Dusan Lukic

Cảm ơn vì bài viết rất hữu ích này. Tôi chỉ muốn sửa một chút, bạn nói rằng "PHP luôn truyền đối tượng theo tham chiếu", điều này thực tế không hoàn toàn đúng, vì PHP sử dụng cơ chế đặc biệt cho các đối tượng tương tự như truyền theo tham chiếu, đó là câu thứ hai trên . http. //php. net/manual/vi/ngôn ngữ. oop5. người giới thiệu. php Ngoài ra, bài viết tuyệt vời

Dusan Lukic

Cảm ơn vì bài viết rất hữu ích này. Tôi chỉ muốn sửa một chút, bạn nói rằng "PHP luôn truyền đối tượng theo tham chiếu", điều này thực tế không hoàn toàn đúng, vì PHP sử dụng cơ chế đặc biệt cho các đối tượng tương tự như truyền theo tham chiếu, đó là câu thứ hai trên . http. //php. net/manual/vi/ngôn ngữ. oop5. người giới thiệu. php Ngoài ra, bài viết tuyệt vời

Roy

Bài báo được viết rất tốt với nội dung gốc. Tốt lắm

Roy

Bài báo được viết rất tốt với nội dung gốc. Tốt lắm

Donato C. Laynes Gonzales

Về #2, $_POST['active'] sẽ tạo E_NOTICE nếu khóa không tồn tại (các hộp kiểm và radio không được chọn) Nếu bạn quan tâm đến hiệu suất và bảo mật của PHP, điều này rất quan trọng. array_key_exists là tùy chọn tốt hơn như đã giải thích. Trân trọng

Donato C. Laynes Gonzales

Về #2, $_POST['active'] sẽ tạo E_NOTICE nếu khóa không tồn tại (các hộp kiểm và radio không được chọn) Nếu bạn quan tâm đến hiệu suất và bảo mật của PHP, điều này rất quan trọng. array_key_exists là tùy chọn tốt hơn như đã giải thích. Trân trọng

Aschwin Wesselius

Đáng ngạc nhiên là không ai đề cập đến việc bạn sử dụng /root/test. php. Tôi biết, đó là môi trường cục bộ và tất cả, nhưng vẫn chạy các tập lệnh kiểm tra trong thư mục gốc của bạn, đặc biệt là các kiểm tra ngốn nhiều bộ nhớ. Điều đó được thực hiện trên mục đích?

Aschwin Wesselius

Đáng ngạc nhiên là không ai đề cập đến việc bạn sử dụng /root/test. php. Tôi biết, đó là môi trường cục bộ và tất cả, nhưng vẫn chạy các tập lệnh kiểm tra trong thư mục gốc của bạn, đặc biệt là các kiểm tra ngốn nhiều bộ nhớ. Điều đó được thực hiện trên mục đích?

ajaniashish

Bài viết xuất sắc Ilya, hoàn toàn đồng ý với nhận định của bạn "hàng giờ vò đầu bứt tóc". Thông thường, khi nói đến việc tối ưu hóa tốc độ trang web, chúng tôi thấy các truy vấn không cần thiết bên trong các vòng lặp. Công cụ tuyệt vời

ajaniashish

Bài viết xuất sắc Ilya, hoàn toàn đồng ý với nhận định của bạn "hàng giờ vò đầu bứt tóc". Thông thường, khi nói đến việc tối ưu hóa tốc độ trang web, chúng tôi thấy các truy vấn không cần thiết bên trong các vòng lặp. Công cụ tuyệt vời

Scott

Bởi vì PSR-2 có ý định trở thành Tiêu chuẩn mã hóa thực sự duy nhất. Có, các tiêu chuẩn mã hóa là bắt buộc, nhưng không nhất thiết phải là PSR-2. Ngay cả bài viết này cũng nói rằng bạn cần một "lý do thuyết phục" để không sử dụng nó, điều đơn giản là không đúng

Scott

Bởi vì PSR-2 có ý định trở thành Tiêu chuẩn mã hóa thực sự duy nhất. Có, các tiêu chuẩn mã hóa là bắt buộc, nhưng không nhất thiết phải là PSR-2. Ngay cả bài viết này cũng nói rằng bạn cần một "lý do thuyết phục" để không sử dụng nó, điều đơn giản là không đúng

Jason EdgeCombe

Trong mẹo số 4 và số 5, sử dụng truy vấn () với nối chuỗi là một ví dụ trong sách giáo khoa về lỗ hổng SQL injection. Tốt hơn là sử dụng các câu lệnh đã chuẩn bị sẵn hoặc ít nhất là cảnh báo người đọc rằng các biến đầu vào phải được làm sạch trước. Vui lòng cập nhật bài viết để mọi người không mù quáng sử dụng mã ví dụ và nghĩ rằng nó an toàn. Bài viết này cũng cần có ngày khi bài viết được viết hoặc cập nhật lần cuối để người đọc có thể biết liệu thông tin có cũ không

Jason EdgeCombe

Trong mẹo số 4 và số 5, sử dụng truy vấn () với nối chuỗi là một ví dụ trong sách giáo khoa về lỗ hổng SQL injection. Tốt hơn là sử dụng các câu lệnh đã chuẩn bị sẵn hoặc ít nhất là cảnh báo người đọc rằng các biến đầu vào phải được làm sạch trước. Vui lòng cập nhật bài viết để mọi người không mù quáng sử dụng mã ví dụ và nghĩ rằng nó an toàn. Bài viết này cũng cần có ngày khi bài viết được viết hoặc cập nhật lần cuối để người đọc có thể biết liệu thông tin có cũ không

Công viên Grant Wesley

Đó là điều tương tự. null là giá trị null duy nhất

Công viên Grant Wesley

Đó là điều tương tự. null là giá trị null duy nhất

Jeff Mattson

Trong Sai lầm phổ biến #2. Ví dụ của bạn không nên đọc nếu (. $_POST['đang hoạt động']) { echo 'bài đăng không hoạt động';

Jeff Mattson

Trong Sai lầm phổ biến #2. Ví dụ của bạn không nên đọc nếu (. $_POST['đang hoạt động']) { echo 'bài đăng không hoạt động';

M. S. vignesh

có cách nào khác không?

M. S. vignesh

có cách nào khác không?

Vojtech Kurka

sử dụng một biến làm bộ đếm

Vojtech Kurka

sử dụng một biến làm bộ đếm

Erutan409

Tôi thấy những điều sau đây là vô lý. Dấu ngoặc mở cho lớp PHẢI ở dòng tiếp theo và dấu ngoặc đóng PHẢI ở dòng tiếp theo sau phần thân. Dấu ngoặc mở cho các phương thức PHẢI đi trên dòng tiếp theo và dấu ngoặc đóng PHẢI đi trên dòng tiếp theo sau phần thân. Vì vậy, tôi cũng gặp một số vấn đề với PSR-2

Erutan409

Tôi thấy những điều sau đây là vô lý. Dấu ngoặc mở cho lớp PHẢI ở dòng tiếp theo và dấu ngoặc đóng PHẢI ở dòng tiếp theo sau phần thân. Dấu ngoặc mở cho các phương thức PHẢI đi trên dòng tiếp theo và dấu ngoặc đóng PHẢI đi trên dòng tiếp theo sau phần thân. Vì vậy, tôi cũng gặp một số vấn đề với PSR-2

phat_boi

Thật. Tuy nhiên, tiêu chuẩn nào được sử dụng không quan trọng miễn là nó rộng khắp tổ chức. Bạn không vào công ty mà chỉ bắt đầu sử dụng PSR-2 khi đã có một tiêu chuẩn được thiết lập. Bạn kết thúc với một mớ hỗn độn theo cách đó

phat_boi

Thật. Tuy nhiên, tiêu chuẩn nào được sử dụng không quan trọng miễn là nó rộng khắp tổ chức. Bạn không vào công ty mà chỉ bắt đầu sử dụng PSR-2 khi đã có một tiêu chuẩn được thiết lập. Bạn kết thúc với một mớ hỗn độn theo cách đó

Julian Chappell

+1. tất cả kẻ giết người không phụ

Julian Chappell

+1. tất cả kẻ giết người không phụ

Juukie14

👍 mẹo hay

Juukie14

👍 mẹo hay

Không Tên

> Sai lầm thường gặp #5 Đó không phải là sai lầm thực sự. Hãy xem xét, nếu truy vấn của bạn có thời lượng chạy 1 giây/truy vấn, vậy điều gì xảy ra nếu bạn cần 50-100 truy vấn như vậy? . Nhưng bạn phải xóa bộ nhớ tài nguyên sau khi nhận được kết quả truy vấn nếu bạn có ít hơn một số truy vấn đơn giản. Và về PSR-1 > Tên lớp PHẢI được khai báo trong StudlyCaps Đây là điều điên rồ nhất trong PSR

Không Tên

> Sai lầm thường gặp #5 Đó không phải là sai lầm thực sự. Hãy xem xét, nếu truy vấn của bạn có thời lượng chạy 1 giây/truy vấn, vậy điều gì xảy ra nếu bạn cần 50-100 truy vấn như vậy? . Nhưng bạn phải xóa bộ nhớ tài nguyên sau khi nhận được kết quả truy vấn nếu bạn có ít hơn một số truy vấn đơn giản. Và về PSR-1 > Tên lớp PHẢI được khai báo trong StudlyCaps Đây là điều điên rồ nhất trong PSR

Không Tên

> Sai lầm thường gặp #10. Bạn không bao giờ nên sử dụng ArrayObject thay vì mảng gốc. Nhưng bạn nên đặt kiểu định nghĩa khi bạn cần một mảng làm đối số. Bạn phải luôn biết những gì bạn mong đợi thì sẽ không bao giờ mắc lỗi trong các ví dụ trống/isset

Không Tên

> Sai lầm thường gặp #10. Bạn không bao giờ nên sử dụng ArrayObject thay vì mảng gốc. Nhưng bạn nên đặt kiểu định nghĩa khi bạn cần một mảng làm đối số. Bạn phải luôn biết những gì bạn mong đợi thì sẽ không bao giờ mắc lỗi trong các ví dụ trống/isset

Người vượt qua Idemudia

Tuyệt vời, cảm ơn bạn

Người vượt qua Idemudia

Tuyệt vời, cảm ơn bạn

Erik Bêlarut

một giải pháp tốt cho lỗi #1 thay vì nhớ gọi unset() sẽ là sử dụng array_map()

Erik Bêlarut

một giải pháp tốt cho lỗi #1 thay vì nhớ gọi unset() sẽ là sử dụng array_map()

Evgeny Chernyavskiy

cũng như mảng_walk()

Evgeny Chernyavskiy

cũng như mảng_walk()

timw4mail

Tuy nhiên, bài đăng đó có những điểm không chính xác vào thời điểm đó và ít liên quan hơn bao giờ hết. Tôi sẽ không nói rằng PHP là một ngôn ngữ 'thuần' hay 'sạch', nhưng nói chung nó không dễ bị lỗi như 'bài viết' đó có vẻ như vậy

timw4mail

Tuy nhiên, bài đăng đó có những điểm không chính xác vào thời điểm đó và ít liên quan hơn bao giờ hết. Tôi sẽ không nói rằng PHP là một ngôn ngữ 'thuần' hay 'sạch', nhưng nói chung nó không dễ bị lỗi như 'bài viết' đó có vẻ như vậy

Ricardo Sánchez

Tại sao không chỉ. mảng $?. ) Chúng tôi biết biến luôn được đặt, luôn luôn. Tại sao bạn cố gắng sử dụng một biến có thể không tồn tại? . Các biến phải luôn tồn tại. cộng với isset và trống dẫn đến lỗi đánh máy trong tập lệnh. $myVars = 0; . Hãy để trình biên dịch phàn nàn thay vì im lặng với @/isset/empty. PSR chỉ nhằm mục đích sử dụng nội bộ. Nó KHÔNG BAO GIỜ nhằm mục đích được sử dụng cho người khác. như họ nói trong Câu hỏi thường gặp. "Không ai trong nhóm muốn nói với bạn, với tư cách là một lập trình viên, cách xây dựng ứng dụng của bạn. " Vì vậy, đó là một lỗi phổ biến mà các lập trình viên php mắc phải, hãy làm theo khuyến nghị không dành cho họ. )

Ricardo Sánchez

Tại sao không chỉ. mảng $?. ) Chúng tôi biết biến luôn được đặt, luôn luôn. Tại sao bạn cố gắng sử dụng một biến có thể không tồn tại? . Các biến phải luôn tồn tại. cộng với isset và trống dẫn đến lỗi đánh máy trong tập lệnh. $myVars = 0; . Hãy để trình biên dịch phàn nàn thay vì im lặng với @/isset/empty. PSR chỉ nhằm mục đích sử dụng nội bộ. Nó KHÔNG BAO GIỜ nhằm mục đích được sử dụng cho người khác. như họ nói trong Câu hỏi thường gặp. "Không ai trong nhóm muốn nói với bạn, với tư cách là một lập trình viên, cách xây dựng ứng dụng của bạn. " Vì vậy, đó là một lỗi phổ biến mà các lập trình viên php mắc phải, hãy làm theo khuyến nghị không dành cho họ. )

Marco Cante

Dành cho 2. get_define_vars với array_key_exist rất chậm nếu bạn đặt nhiều biến, phải không?

Marco Cante

Dành cho 2. get_define_vars với array_key_exist rất chậm nếu bạn đặt nhiều biến, phải không?

khổ hạnh

đó là vấn đề về quan điểm và các tiêu chuẩn được xác định bởi thực tiễn của đa số. Tại sao lại vô lý như vậy? . Các định nghĩa lớp và định nghĩa phương thức có thể dài (đôi khi ghi nhật ký vô lý) để dấu ngoặc mở có thể ở bên phải. Để nó tự động xuống dòng tiếp theo giúp tiết kiệm khả năng đọc và đó chỉ là một quy tắc giúp giảm ô nhiễm

khổ hạnh

đó là vấn đề về quan điểm và các tiêu chuẩn được xác định bởi thực tiễn của đa số. Tại sao lại vô lý như vậy? . Các định nghĩa lớp và định nghĩa phương thức có thể dài (đôi khi ghi nhật ký vô lý) để dấu ngoặc mở có thể ở bên phải. Để nó tự động xuống dòng tiếp theo giúp tiết kiệm khả năng đọc và đó chỉ là một quy tắc giúp giảm ô nhiễm

khổ hạnh

1. Tiện ích mở rộng mysql được đề cập ở đó không được dùng nữa ngay cả tại thời điểm viết bài. Đó là một vấn đề mà thậm chí sau đó không cần giải pháp mã. 2. Nghiêm túc mà nói, tác giả đang đưa ra một giải pháp thay thế, một phương pháp được loại bỏ có chủ đích khỏi php lõi (trả lại bằng cách tham khảo) mà tất cả các hướng dẫn thực hành tốt nhất đều khuyên chống lại (trừ khi có lý do thực sự chính đáng) vì lý do duy nhất là cho phép thay đổi thành viên lớp RIÊNG TƯ . tại sao thúc đẩy trở lại bằng cách tham khảo?

khổ hạnh

1. Tiện ích mở rộng mysql được đề cập ở đó không được dùng nữa ngay cả tại thời điểm viết bài. Đó là một vấn đề mà thậm chí sau đó không cần giải pháp mã. 2. Nghiêm túc mà nói, tác giả đang đưa ra một giải pháp thay thế, một phương pháp được loại bỏ có chủ đích khỏi php lõi (trả lại bằng cách tham khảo) mà tất cả các hướng dẫn thực hành tốt nhất đều khuyên chống lại (trừ khi có lý do thực sự chính đáng) vì lý do duy nhất là cho phép thay đổi thành viên lớp RIÊNG TƯ . tại sao thúc đẩy trở lại bằng cách tham khảo?

govindrajput

Bài viết hay và thông tin rất hay có trong bài đăng này vì vậy tôi thích bài đăng này cảm ơn

govindrajput

Bài viết hay và thông tin rất hay có trong bài đăng này vì vậy tôi thích bài đăng này cảm ơn

CÔNG TY TÀI CHÍNH NĂM SAO

Bạn có cần một khoản vay để hợp nhất khoản nợ của mình ở mức 3% không? . Chúng tôi cung cấp dịch vụ tư vấn tài chính cho khách hàng, các công ty đang tìm kiếm khoản nợ / tài trợ cho vay và tìm kiếm vốn lưu động để bắt đầu một doanh nghiệp mới hoặc để mở rộng hoạt động kinh doanh hiện có. Các bên trung gian / Tư vấn / Môi giới được chào đón mang theo khách hàng của họ và được bảo vệ 100%. Các bên quan tâm nên liên hệ với chúng tôi để biết thêm thông tin qua email. fivestarfinancecompany@gmail. com Để gọi hoặc whatsapp chúng tôi +16042659337

CÔNG TY TÀI CHÍNH NĂM SAO

Bạn có cần một khoản vay để hợp nhất khoản nợ của mình ở mức 3% không? . Chúng tôi cung cấp dịch vụ tư vấn tài chính cho khách hàng, các công ty đang tìm kiếm khoản nợ / tài trợ cho vay và tìm kiếm vốn lưu động để bắt đầu một doanh nghiệp mới hoặc để mở rộng hoạt động kinh doanh hiện có. Các bên trung gian / Tư vấn / Môi giới được chào đón mang theo khách hàng của họ và được bảo vệ 100%. Các bên quan tâm nên liên hệ với chúng tôi để biết thêm thông tin qua email. fivestarfinancecompany@gmail. com Để gọi hoặc whatsapp chúng tôi +16042659337

điểm ngon

Heyas, I may be 4 or 5 years to late for a response, but no one seems to know the right answer to this one. If I create a php index file with html tags neatly laid out which is worse: A) Having a bunch of php code on top of the index php file and some in the middle for example "" <--- alot of these or B) index php file with all the html tags neatly, and 1 or 2 include(""); ? I'm assuming A) is worse but why am I doing B) and avoiding A)? Thanks in advance! bah, it wont let me type the php carot and question mark and then php it omits it but its supposed to go where it looks janky

điểm ngon

Heyas, I may be 4 or 5 years to late for a response, but no one seems to know the right answer to this one. If I create a php index file with html tags neatly laid out which is worse: A) Having a bunch of php code on top of the index php file and some in the middle for example "" <--- alot of these or B) index php file with all the html tags neatly, and 1 or 2 include(""); ? I'm assuming A) is worse but why am I doing B) and avoiding A)? Thanks in advance! bah, it wont let me type the php carot and question mark and then php it omits it but its supposed to go where it looks janky

kín đáo

good awesome information, thanks yaser Discreet Soft

AbelardoLG

Bài báo tuyệt vời. Cảm ơn vì đã mang nó đến cho chúng tôi. . ) anh

JorgeC

PHP, bao gồm PHP +7 với opcache khá hiệu quả. Tuy nhiên, PHP nói chung xử lý bộ nhớ rất tệ, nó thường sử dụng từ x2. 5 (trung bình) cho mọi bộ nhớ được sử dụng. Vì vậy, nếu chúng ta có một mảng có 100 phần tử (100kb), PHP sử dụng 250kb, cộng với các chỉ mục. get_define_vars() có thể chiếm nhiều bộ nhớ vì chúng tôi đang tạo một mảng mới với tất cả các biến, ngay cả khi thời gian này ngắn

Bill Jay

bài viết hay. Tuy nhiên 10 sai lầm này không phổ biến. Đây là 10 lỗi mã hóa mà các nhà phát triển PHP khó phát hiện. Cá nhân, isset() thường hơi khó hiểu. Quy tắc là tránh đặt các biến thành null trong PHP vì điều này tương đương với việc hủy đặt chúng. bỏ đặt($a); . $items = mảng();

Làm cách nào để kiểm tra tất cả dữ liệu bài đăng trong PHP?

Kiểm tra các giá trị POST trong PHP .
Kiểm tra xem có BẤT KỲ dữ liệu POST nào không. //Ghi chú. Điều này giải quyết là đúng ngay cả khi tất cả các giá trị $_POST là các chuỗi trống nếu (. trống($_POST)) { // xử lý dữ liệu bài viết $fromPerson = '+from%3A'. .
Chỉ kiểm tra xem Khóa THAM GIA có sẵn trong dữ liệu bài đăng không

Làm cách nào để chỉ lấy các khóa từ mảng trong PHP?

Hàm array_keys() trả về một mảng chứa các khóa.

Làm cách nào để in khóa mảng trong PHP?

Làm cách nào để lấy khóa mảng kết hợp trong PHP?

Trả lời. Sử dụng hàm array_keys() của PHP .