Php tự trả lại tĩnh

Trong PHP, từ khóa self và this được dùng để chỉ các thành viên của lớp trong phạm vi của một lớp. Các thành viên của lớp có thể là biến hoặc hàm. Các từ khóa PHP này khác với hành vi tĩnh của các thành viên lớp

PHP từ khóa này đề cập đến một thành viên không tĩnh của một lớp đối với thể hiện của lớp được tạo. Vì vậy, các giá trị hoặc đối số của các thành viên lớp sẽ được thay đổi dựa trên giá trị mà thể hiện của lớp được tạo

Nếu chúng ta sử dụng từ khóa này mà không có ngữ cảnh đối tượng để chỉ dữ liệu tĩnh, thì lỗi sau sẽ được hiển thị cho trình duyệt

Fatal error: Using $this when not in object context in .. on Line

Vì vậy, chúng ta nên sử dụng từ khóa self ở những nơi như vậy để chỉ các thành viên tĩnh của lớp để tránh lỗi trên. Trong khi sử dụng self để chỉ dữ liệu tĩnh, chúng ta cần sử dụng toán tử phân giải phạm vi. Ví dụ,


Trong mẫu mã trên, chúng tôi đã chỉ ra cách biến tĩnh $menu được gọi là tự từ khóa PHP

Sự khác biệt giữa bản thân PHP và cái này

selfthisthe từ khóa self sẽ không được đặt trước bất kỳ biểu tượng nào; . Nhưng PHP từ khóa này nên được bắt đầu bằng dấu $ trong khi giới thiệu các thành viên của lớp. Toán tử phân giải phạm vi PHP sẽ được sử dụng với từ khóa self. Ví dụ, bản thân. -> biểu tượng được sử dụng với biến $this như chúng ta đã sử dụng với một thể hiện đối tượng để truy cập thuộc tính của đối tượng đó. Ví dụ: $this->It sẽ được sử dụng để chỉ một thành viên tĩnh của một lớp. cái này được sử dụng để truy cập các thành viên không tĩnh với toán tử ->. Bản thân PHP đang đề cập đến các thành viên của lớp, không dành cho bất kỳ trường hợp cụ thể nào; . Tuy nhiên, $this sẽ giới thiệu các thành viên của lớp cho một thể hiện cụ thể của lớp

Thí dụ. PHP tự Vs cái này

Chúng ta hãy xem sự khác biệt trên với một chương trình PHP đơn giản làm ví dụ để biết, các thành viên của lớp được gọi như thế nào với hai từ khóa PHP này

toys_name = $name;
        $this->toys_category = $category;
    }

    public function getToyName()
    {
        return $this->toys_name;
    }

    public function getToyCategory()
    {
        return $this->toys_category;
    }

    public function getToyShop_nonStatic()
    {
        return self::getToyShop();
    }

    public static function getToyShop()
    {
        return self::$shop_name;
    }

    public static function setToyShop($shopname)
    {
        self::$shop_name = $shopname;
    }
}

$objToys = new Toys("Battery Car", "Battery Toys");
$toys_name = $objToys->getToyName();
$toys_category = $objToys->getToyCategory();
echo "
Toy: " . $toys_name . ", Category: " . $toys_category; Toys::$shop_name = "Disney"; $shop_name = Toys::getToyShop(); echo "
Shop Name: " . $shop_name; Toys::setToyShop("ToyShop"); $shopname = Toys::getToyShop_nonStatic(); echo "
Shop Name via non static function: " . $shopname; ?>

Trong chương trình trên, chúng ta có ba biến thành viên cho lớp Đồ chơi. Hai trong số đó là không tĩnh, dự kiến ​​​​sẽ được khởi tạo tự động trong khi tạo các thể hiện của lớp. Và, lớp chỉ chứa một biến tĩnh thường được gọi cho tất cả các phiên bản của lớp

Với các hàm tạo, các biến lớp được tham chiếu bằng cách sử dụng $this, để khởi tạo. Một lần nữa, bằng cách sử dụng biến $this, các biến thành viên khởi tạo được tham chiếu cho các getter của lớp được định nghĩa là một hàm thành viên không tĩnh, trả về các giá trị bắt buộc cho một thể hiện của lớp cụ thể

Mặt khác, các thành viên tĩnh được gọi là từ khóa self để trả về giá trị tĩnh của $shop_name bởi hàm thành viên tĩnh getToyShop() của lớp Đồ chơi

Bên ngoài lớp, đầu tiên, chúng tôi đã tạo một thể hiện với hai đối số, để tự động gọi hàm tạo của lớp. Đối với đối tượng hoặc thể hiện này, các hàm thành viên không tĩnh được gọi để nhận giá trị của $toys_name và $toys_category. Bây giờ, các hàm thành viên sử dụng $this để chỉ các giá trị được khởi tạo khi khởi tạo

Và sau đó, các thành viên tĩnh được truy cập từ bên ngoài lớp bằng cách sử dụng chính tên lớp. Tuy nhiên, trong phạm vi lớp, chúng tôi đã sử dụng self để truy cập các thành viên đó. Trong chương trình này, chúng tôi đã truy xuất các giá trị biến tĩnh bằng cách sử dụng hàm thành viên không tĩnh getToyShop_nonStatic(), đồng thời

Sau khi thực hiện chương trình PHP trên, nó sẽ trả về đầu ra sau cho trình duyệt sẽ được hiển thị

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ự trả lại tĩnh

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 self:: 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 makeSound() 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 self:: 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 self::. 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   Cách thay đổi các thuộc tính của Eloquent Model

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 self::

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ố 8_______

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

Như đã thấy trong ví dụ này, việc sử dụng phương thức self:: 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 makeSound() sẽ bị ghi đè bởi lớp

otherStaticMethod(); // A
9, nhưng thực tế không phải vậy.  

CŨNG ĐỌC   Bản đánh máy NestJS. Hướng dẫn cơ bản (2022)

Điều này xảy ra bởi vì khi chúng tôi sử dụng self::, chúng tôi đề cập đến lớp thuộc tính đã sử dụng từ khóa self::, 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 self:: 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ự trả lại tĩnh

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ụ

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   Hướng dẫn ExpressJS. Hướng dẫn cơ bản (2022)

Đ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ụ

test(); // Fails because the private function's scope is in C and trying to access it from A will fail

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 ở Lớp A, không phải phương pháp ở 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

Kiểu trả về tĩnh trong PHP là gì?

Kiểu trả về tĩnh được giới thiệu trong PHP 8. 0 cho phép chỉ định rằng một phương thức phải trả về một thể hiện của phạm vi liên kết tĩnh muộn (LSB) , điều này thường xảy ra đối với các hàm tạo có tên, héo . Tuy nhiên, API thông thạo có hợp đồng cụ thể hơn yêu cầu trả lại $this.

Làm cách nào để gọi bản thân trong PHP?

self được sử dụng để truy cập các biến hoặc phương thức tĩnh hoặc lớp 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 vào nội dung nào đó thuộc về một lớp và sử dụng $this khi có nhu cầu truy cập vào một thuộc tính thuộc về lớp đó. .

Sự khác biệt giữa việc sử dụng self và $this trong PHP là gì?

Từ khóa self được sử dụng để chỉ chính lớp hiện tại trong phạm vi của lớp đó trong khi $this được sử dụng để chỉ các biến thành viên và hàm cho một thể hiện cụ thể của một lớp

Kiểu trả về tĩnh nghĩa là gì?

kiểu trả về tĩnh tuân theo Nguyên tắc thay thế Liskov. Một phương thức lớp con có thể trả về một đối tượng lớp hẹp hơn kiểu trả về của phương thức cha . Bởi vì tĩnh luôn đề cập đến tên lớp của đối tượng được gọi (i. e. giống như get_class($object) ), static là tập con của self , do đó là tập con của parent.