Kiểu gợi ý php là gì?

Khi bạn đang gọi một hàm hoặc phương thức có (các) đối số, không phải lúc nào bạn cũng biết loại đối số nào (mảng, đối tượng, chuỗi, v.v.) để truyền vào hàm. Và nếu cuối cùng bạn chuyển sai loại, bạn sẽ nhận được một lỗi không hữu ích

Để khắc phục điều này, bạn có thể sử dụng gợi ý loại để cải thiện độ rõ ràng của mã và cải thiện lỗi. Gợi ý kiểu cho phép bạn chỉ định các kiểu dữ liệu mà bạn mong đợi cho một đối số cho một khai báo hàm. Bạn có thể chỉ định các loại dữ liệu như mảng, đối tượng và giao diện. Gợi ý kiểu là tùy chọn, nhưng nó giúp gỡ lỗi mã của bạn dễ dàng hơn và cho phép IDE của bạn cung cấp tính năng tự động hoàn thành cùng với các lợi ích khác

Xét ví dụ đơn giản sau

<?php

$ingredients  = array('banana', 'strawberry');

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

Điều này sẽ in chuối và dâu ra màn hình

Nhưng không rõ ngay rằng đối số $ingredients trong hàm shake phải là một mảng. Vậy điều gì xảy ra nếu bạn chuyển vào một chuỗi?

$ingredients = 'coconut';

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

Bạn sẽ nhận được lỗi sau

Cảnh báo. Đối số không hợp lệ được cung cấp cho foreach()

Lỗi đang tham chiếu foreach vì bạn đã cố truyền cho nó một chuỗi khi nó đang mong đợi một mảng

Để sử dụng gợi ý kiểu với ví dụ này, hãy thêm kiểu ngày vào đối số hàm. Trong trường hợp này, kiểu dữ liệu là mảng

function shake (array $ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

Sau đó, nếu bạn chuyển vào chuỗi, bạn sẽ nhận được một lỗi có ý nghĩa hơn

$ingredients = 'coconut';

function shake (array $ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

Lỗi là bây giờ

Lỗi nghiêm trọng có thể bắt được. Đối số 1 được truyền cho shake() phải thuộc kiểu mảng, chuỗi đã cho, được gọi trong /Users/blairwadman/Sites/tutorials/typehinting/index. php trên dòng 13 và được định nghĩa trong /Users/blairwadman/Sites/tutorials/typehinting/index. php trên dòng 7

Điều này rất có ý nghĩa và cho bạn biết chính xác vấn đề là gì và nó đang ở đâu

Gợi ý loại đối tượng

Bạn cũng có thể chỉ định một lớp hoặc giao diện làm gợi ý kiểu

Xem xét triển khai Drupal sau đây của hook_form_alter()

<?php
/**
 * Implements hook_user_login($account).
 *
 * @param $account
 */
function welcome_user_login($account) {
  $name = $account->getDisplayName();
  drupal_set_message(t('Hello @name, thank you for logging in and welcome!', ['@name' => $name]));
}

Bây giờ bạn có tên hiển thị từ tài khoản $. Nhưng bạn phải biết rằng getDisplayName() là một phương thức khả dụng

May mắn thay, có một cách dễ dàng hơn nếu bạn sử dụng gợi ý kiểu và một IDE như PHPStorm

Nếu bạn bao gồm một lớp cơ sở hoặc giao diện cho biến $account, IDE của bạn sẽ cho bạn biết các phương thức và thuộc tính có sẵn

Thêm gợi ý kiểu 'AccountInterface' vào hàm welcome_user_login()

function welcome_user_login(\Drupal\Core\Session\AccountInterface $account) {

Và bây giờ khi bạn bắt đầu nhập $account-> , IDE sẽ cung cấp cho bạn tính năng tự động hoàn thành

Kiểu gợi ý php là gì?

Thêm một tuyên bố sử dụng

Bạn cũng có thể bao gồm một tuyên bố sử dụng trong tệp

$ingredients = 'coconut';

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

4 để bạn có thể tham khảo 'AccountInterface' thay vì hệ thống phân cấp không gian tên đầy đủ

Ở đầu tệp

$ingredients = 'coconut';

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

4, hãy thêm câu lệnh sử dụng sau

use Drupal\user\AccountInterface;

Thay đổi đối số chức năng

function welcome_user_login(AccountInterface $account) {

Đặt tất cả những thứ này lại với nhau, welcome_user_login() hiện là

________số 8

kết thúc

Sử dụng gợi ý kiểu trong mã của bạn giúp mã rõ ràng hơn và ít bị lỗi hơn, cải thiện các lỗi bạn gặp phải và cũng hỗ trợ tự động hoàn thành. Gợi ý kiểu chưa phải là một phần của tiêu chuẩn mã Drupal (vì vậy chúng không bắt buộc đối với mã lõi và mã được đóng góp), nhưng bạn có thể tìm thấy rất nhiều ví dụ trong mã lõi

Gợi ý kiểu là khai báo kiểu cho đối số hàm, giá trị trả về và thuộc tính lớp. PHP đảm bảo giá trị thuộc cùng loại mà bạn đã khai báo hoặc ném TypeError. Không bắt buộc nhưng rất hữu ích để bắt lỗi và hữu ích cho những người khác đọc mã của bạn để hiểu điều gì đang xảy ra

đối số chức năng

Để gõ gợi ý thông báo đối số chức năng của chúng tôi về lỗi phương thức của chúng tôi, chúng tôi sẽ thêm chuỗi ngay trước đối số của chúng tôi

<?php

class Logger

{

    private $message;



    function alert(string $message)

    {

        return $this->message;

    }

}

$logger = new Logger;

$logger->alert('Wrong password');

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Điều này đảm bảo rằng bất cứ thứ gì được truyền vào phương thức của chúng ta,

$ingredients = 'coconut';

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

6 luôn là một loại chuỗi hoặc một lỗi được đưa ra

Giá trị trả về

Điều này cũng làm việc cho phản ứng của chúng tôi. Trong trường hợp này, chúng tôi hy vọng phương thức của chúng tôi sẽ trả về một chuỗi và vì vậy chúng tôi thêm

$ingredients = 'coconut';

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

7 sau đối số của chúng tôi

$ingredients = 'coconut';

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

0

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bất cứ điều gì chúng ta sẽ chuyển đến phương thức lỗi của mình dưới dạng đối số (chuỗi, số nguyên, boolean, mảng, v.v. ), lợi nhuận của chúng tôi phải luôn là một loại chuỗi nếu không sẽ xảy ra lỗi

Thuộc tính lớp

Bên cạnh các phương thức, chúng ta cũng có thể gõ gợi ý các thuộc tính của mình. Trong trường hợp tin nhắn của chúng tôi, chúng tôi thêm chú thích

$ingredients = 'coconut';

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

8

$ingredients = 'coconut';

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

1

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Điều này đảm bảo rằng bất cứ khi nào chúng ta gọi thuộc tính này thì nó phải là một loại chuỗi hoặc một lỗi được đưa ra

Tất cả các loại gợi ý với nhau

Nếu chúng tôi lưu các thông báo ghi nhật ký trong cơ sở dữ liệu của mình và chúng tôi muốn tạo getters và setters cho thông báo của mình, chúng tôi có thể sử dụng cả 3 loại gợi ý loại như sau

$ingredients = 'coconut';

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

2

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Tôi đã gõ gợi ý thuộc tính

$ingredients = 'coconut';

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

6, đối số là chuỗi và thêm kết quả mong đợi là một chuỗi cho phương thức
function shake (array $ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}
0. Đối với phương pháp
function shake (array $ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}
1, tôi đã thêm kết quả dự kiến ​​là
$ingredients = 'coconut';

function shake ($ingredients) {
  foreach($ingredients as $ingredient) {
    print $ingredient;
  }
}

shake($ingredients);

00. Điều này có nghĩa là chúng tôi không mong đợi bất cứ điều gì cho phương pháp này, điều này là do trình thiết lập sẽ chỉ đặt thuộc tính của chúng tôi và không trả lại cho chúng tôi bất kỳ thứ gì

Loại phương pháp gợi ý

Một số cũng sẽ gõ gợi ý các phương thức của họ, tương tự như thuộc tính của chúng ta, nhưng điều này là không cần thiết vì chúng ta đã gõ gợi ý thuộc tính, đối số và phản hồi của mình

Loại được gợi ý là gì?

Danh từ. (lập trình) Đặc điểm kỹ thuật của các loại dữ liệu bằng ngôn ngữ không được nhập, để thực thi các biến có một loại cụ thể .

Gợi ý kiểu được thêm vào PHP khi nào?

Vào tháng 5 năm 2010 hỗ trợ cho gợi ý loại vô hướng đã được thêm vào thân PHP.

Khai báo kiểu còn được gọi là gợi ý kiểu là gì?

Gợi ý loại là một giải pháp chính thức để chỉ định tĩnh loại giá trị trong mã Python của bạn . Nó được chỉ định trong PEP 484 và được giới thiệu trong Python 3. 5. Đây là một ví dụ về việc thêm thông tin loại vào một chức năng.

PHP có loại an toàn không?