PHP tự từ khóa

PHP hỗ trợ các lớp và các cấu trúc hướng đối tượng khác. Các hàm và biến tĩnh trong các lớp PHP không được liên kết với bất kỳ thể hiện cụ thể nào của lớp (nói cách khác, một đối tượng). Xem sự khác biệt giữa đối tượng và lớp

Thay vào đó, các hàm và biến tĩnh được liên kết với chính định nghĩa lớp. Nói cách khác, tất cả các phiên bản của một lớp chia sẻ cùng một biến tĩnh. Trong ngữ cảnh của một phương thức (hàm) của một lớp, các biến và hàm tĩnh được truy cập bằng cách sử dụng

otherStaticMethod(); // A
1. Các phương thức và biến khác được sử dụng trong ngữ cảnh của một đối tượng (một thể hiện) của một lớp, sử dụng
otherStaticMethod(); // A
2

Biểu đồ so sánh

self so với biểu đồ so sánh nàyselfthisCó thể được sử dụng trong các hàm tĩnhCóKhôngCó thể tự truy cập biến lớp và phương thức. $this-> (Lưu ý rằng PHP > 5. 3 cho phép sử dụng $this với biến tĩnh sử dụng $this. $foo. $this->foo sẽ vẫn không được xác định nếu $foo là một var tĩnh. ) Cần một đối tượng khởi tạo Không Có

self vs this trong PHP - Ví dụ

class exampleClass
{
    public static $foo;
    public $bar;
    public function regularFunction() { echo $this->bar; }

    public static function staticFunction() { echo self::$foo; }

    public static function anotherStatFn() { self::staticFunction(); }

    public function regularFnUsingStaticVar() { echo self::$foo; }
    
    // NOTE: As of PHP 5.3 using $this::$bar instead of self::$bar is allowed

}

exampleClass::$foo = "Hello";

$obj = new exampleClass();

$obj->bar = "World!";

exampleClass::staticFunction(); /* prints Hello */

$obj->regularFunction(); /* prints World! */

Các hàm tĩnh chỉ có thể sử dụng các biến tĩnh. Các hàm và biến tĩnh được tham chiếu qua self. functionName() hoặc tự. tên biến. Trong ví dụ hiển thị ở trên, các biến tĩnh được tham chiếu với tên lớp (exampleClass. $foo) hoặc, với một self. (bản thân. $foo) khi được sử dụng trong phương thức tĩnh [có tên là staticFunction()] của lớp

Các hàm và biến thông thường của một lớp cần có ngữ cảnh đối tượng để được tham chiếu. Chúng không thể tồn tại nếu không có bối cảnh đối tượng. Bối cảnh đối tượng được cung cấp bởi $this. Trong ví dụ trên, $bar là một biến thông thường và do đó nó được tham chiếu là $obj->bar (trong ngữ cảnh đối tượng có biến obj) hoặc $this->bar (một lần nữa trong ngữ cảnh đối tượng trong một phương thức của đối tượng

self không sử dụng $ trước vì self không bao hàm một biến mà lớp tự xây dựng. $this không tham chiếu đến một biến cụ thể nên nó có $ trước

Theo nhiều cách, PHP hỗ trợ Lập trình hướng đối tượng (đặc biệt là sử dụng self. , tĩnh. và cha mẹ. trong PHP)

Việc xem mã được viết theo thủ tục đang trở nên cổ xưa và giống như việc tìm thấy hóa thạch khủng long ở Nam Cực

Tất cả chúng ta đều có thể đồng ý rằng viết mã theo cách Hướng đối tượng tốt hơn viết theo thủ tục theo nhiều cách

Một trong những nguyên lý cơ bản của Ngôn ngữ hướng đối tượng là khái niệm kế thừa. Một ngôn ngữ lập trình phải hỗ trợ kế thừa để được coi là Hướng đối tượng hoặc có thể.  

Khi viết các lớp trong PHP, sẽ có lúc chúng ta cần truy cập các phương thức được định nghĩa trong một lớp hoặc một lớp cha bên trong chính lớp đó (chứ không phải là một thể hiện của lớp đó).  

Có ba bộ truy cập như vậy có thể dễ bị nhầm lẫn và chúng tự. , tĩnh. và cha mẹ. trong PHP. Bài viết này sẽ mô tả những điều này một cách chi tiết để loại bỏ bất kỳ sự mơ hồ nào có thể tồn tại với các bộ truy cập này

Trước khi bạn đi sâu vào, hãy xem hướng dẫn cơ bản về Laravel 2021 để được cập nhật với Laravel Development

PHP tự từ khóa

Nếu bạn là nhà phát triển phụ trợ hoặc đang tìm hiểu sâu về con đường sự nghiệp này, hãy tham gia cùng các nhà phát triển khác để nhận các bài viết hàng ngày về phát triển phụ trợ giúp tăng năng suất của bạn

cái tôi. người truy cập

Để hình dung điều này, chúng ta hãy nhìn vào dòng mã này

Nhìn vào ví dụ này, rõ ràng từ khóa

otherStaticMethod(); // A
1 làm gì. Nó được sử dụng để chỉ một số thành viên khác của lớp (thuộc tính hoặc phương thức) trong cùng một lớp. Trong ví dụ của chúng tôi, chúng tôi đề cập đến phương pháp
otherStaticMethod(); // A
4 trong phương pháp
otherStaticMethod(); // A
0

Sử dụng bản thân. với các thành viên lớp tĩnh và không tĩnh

Điều quan trọng cần lưu ý là từ khóa

otherStaticMethod(); // A
1 có thể được sử dụng cho cả thành viên lớp tĩnh và không tĩnh, nhưng nó sẽ gây ra lỗi khi bạn cố truy cập thành viên không tĩnh từ một phương thức tĩnh chứ không phải ngược lại.  

Dưới đây là một số đoạn mã để minh họa điều này có nghĩa là gì

otherStaticMethod(); // A

Trong ví dụ trên, chúng ta có thể gọi một phương thức tĩnh từ một phương thức tĩnh khác bằng cách sử dụng từ khóa

otherStaticMethod(); // A
1. Chúng tôi cũng có thể làm điều này bằng cách sử dụng trình truy cập
otherStaticMethod(); // A
3

CŨNG ĐỌC   Hướng dẫn về Laravel Breeze. Hướng dẫn dứt khoát (2022)

Như đã thấy trong đoạn mã đầu tiên, chúng ta cũng có thể truy cập các phương thức tĩnh từ các phương thức tĩnh khác bằng cách sử dụng từ khóa

otherStaticMethod(); // A
1

nonStaticMethod(); // I am staticI am not static

Như đã thấy trong ví dụ trên, sử dụng phương thức tĩnh trong phương thức không tĩnh sẽ chạy mà không gặp vấn đề gì

Sử dụng phương thức không tĩnh trong phương thức tĩnh gây ra lỗi. Các quy tắc tương tự được áp dụng ở đây cũng áp dụng cho

otherStaticMethod(); // A
5 và
otherStaticMethod(); // A
6 trong PHP

cha mẹ. người truy cập

cha mẹ. người truy cập là một từ khóa khá cụ thể và chính xác. Nó đề cập đến các phương thức và thuộc tính trong lớp cha từ phạm vi của lớp con. Vì lớp con sẽ ghi đè các thuộc tính theo mặc định, nên trình truy cập có thể tham chiếu rõ ràng đến thuộc tính của lớp cha.  

Nó cũng thuận tiện khi cả hai lớp đều có các thuộc tính có cùng tên.  

Binh yên. người truy cập

Để thấy điều này, hãy xem đoạn mã này

0

Như đã thấy trong ví dụ này, việc sử dụng phương thức

otherStaticMethod(); // A
1 gây ra một số hành vi không mong muốn khi chúng ta mở rộng lớp bằng cách sử dụng nó. Đương nhiên, chúng ta sẽ mong đợi các quy tắc kế thừa tiêu chuẩn rằng phương thức
otherStaticMethod(); // A
4 sẽ bị ghi đè bởi lớp
otherStaticMethod(); // A
9, nhưng thực tế không phải vậy.  

CŨNG ĐỌC   Ví dụ về mối quan hệ 1-1 của Laravel

Điều này xảy ra bởi vì khi chúng tôi sử dụng

otherStaticMethod(); // A
1, chúng tôi đề cập đến lớp thuộc tính đã sử dụng từ khóa
otherStaticMethod(); // A
1, chứ không phải bất kỳ lớp con nào khác mở rộng nó

Bất kỳ phương thức nào chúng ta truy cập bằng từ khóa

otherStaticMethod(); // A
1 sẽ không bị các lớp con ghi đè. Đây có thể không phải là hành vi chúng tôi mong đợi

Hãy nghỉ ngơi và xem hướng dẫn cơ bản về Laravel 2021 để cập nhật thông tin về Laravel Development

PHP tự từ khóa

Trong PHP v5. 3, một tính năng mới gọi là liên kết tĩnh muộn đã được triển khai. Tính năng này cho phép chúng ta sử dụng lớp có tên trong lần gọi cuối cùng của một thuộc tính.  

Điều này có nghĩa là khi bạn sử dụng trình truy cập

otherStaticMethod(); // A
5, phương thức sẽ không được giải quyết cho đến khi chạy và trong thời gian chạy, PHP sẽ kiểm tra lớp cuối cùng xác định phương thức đó trong khi gọi. Điều này sẽ cung cấp cho chúng tôi loại cơ chế ghi đè mà chúng tôi mong đợi.  

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

3

Như đã thấy trong mẫu mã ở trên, việc sử dụng

otherStaticMethod(); // A
5 làm cho phương thức makeSound được truy cập trong thời gian chạy trên lớp ghi đè lên nó. Đó là lý do tại sao việc truy cập vocalize từ các lớp khác nhau hoạt động theo cách chúng ta mong đợi.

Hãy cẩn thận với tĩnh. khi sử dụng với các phương thức không tĩnh riêng tư

Các phương thức riêng tư (và tất cả các thuộc tính) chỉ có thể được truy cập trong lớp xác định chúng. Các lớp cha không thể truy cập chúng. Khi sử dụng trình truy cập

otherStaticMethod(); // A
5 để truy cập các phương thức tĩnh riêng tư trong các lớp con, nó sẽ bị lỗi.  

CŨNG ĐỌC   Mẹo tạo động lực cho nhà phát triển phụ trợ

Điều này là do khi chúng ta truy cập các phương thức con (được ghi đè) trong các lớp con với phương thức tĩnh. từ khóa, chúng tôi đang cố truy cập chúng từ phạm vi của lớp cha.  

Nếu phương thức bị ghi đè là riêng tư, trong thời gian chạy, nó sẽ cố gắng truy cập phương thức mà nó tìm thấy từ lớp cuối cùng gọi nó (là riêng tư) từ phạm vi của lớp cha và vì lớp cha không thể truy cập phương thức đó vì .  

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

6

Sử dụng

nonStaticMethod(); // I am staticI am not static
6 hoặc
nonStaticMethod(); // I am staticI am not static
7 trong
nonStaticMethod(); // I am staticI am not static
8 sẽ hoạt động mà không có lỗi, nhưng nó sẽ lặp lại “success. ” chứ không phải “thất bại” bởi vì họ sẽ đề cập đến phương pháp
nonStaticMethod(); // I am staticI am not static
9 trong Lớp A, không phải phương pháp trong Lớp C.  

Phần kết luận

Chúng tôi đã học một chút về tính kế thừa và các trình truy cập khác nhau, chẳng hạn như bản thân. , tĩnh. cha mẹ. , chúng ta có thể sử dụng khi làm việc với OOP trong PHP. Những bộ truy cập này giúp chúng tôi viết mã sạch triển khai việc sử dụng tính kế thừa và tính đa hình.  

Với những thứ này, chúng tôi có thể xây dựng các cấu trúc dữ liệu hiệu quả giúp dự án của chúng tôi dễ dàng xây dựng, mở rộng quy mô và dễ hiểu ngay cả khi chúng tôi giao mã của mình cho người khác

Tự từ khóa trong PHP là gì?

self được được sử dụng để truy cập các biến hoặc phương thức tĩnh hoặc lớp hoặc phương thức và điều này được sử dụng để truy cập các biến hoặc phương thức không tĩnh hoặc đối tượng. Vì vậy, hãy sử dụng self khi có nhu cầu truy cập thứ gì đó thuộc về một lớp và sử dụng $this khi có nhu cầu truy cập thuộc tính thuộc đối tượng của lớp.

Cha mẹ và bản thân trong PHP là gì?

từ khóa self được sử dụng cho lớp hiện tại và về cơ bản, nó được sử dụng để truy cập các thành viên, phương thức và hằng số tĩnh trong khi cha mẹ. từ khóa được sử dụng cho lớp cha và nó chủ yếu được sử dụng khi bạn muốn gọi hàm tạo hoặc phương thức cha. Nó cũng được sử dụng để truy cập các thành viên và hằng số

Bản thân mới trong PHP là gì?

Bản thân mới. Bản thân là từ khóa trong PHP. Nó đề cập đến cùng một lớp mà từ khóa mới thực sự được viết . Nó đề cập đến các thành viên của lớp, nhưng không dành cho bất kỳ đối tượng cụ thể nào. Điều này là do các thành viên tĩnh (biến hoặc hàm) là các thành viên lớp được chia sẻ bởi tất cả các đối tượng của lớp.

Sự khác biệt giữa bản thân và tĩnh trong PHP là gì?

bản thân Vs tĩnh. Sự khác biệt cơ bản nhất giữa chúng là self trỏ đến phiên bản thuộc tính của lớp mà nó được khai báo nhưng trong trường hợp tĩnh, thuộc tính đó trải qua quá trình khai báo lại khi chạy.