Php không phải instanceof
Giá trị trả về. Hàm này trả về True nếu đối tượng thuộc lớp này hoặc có lớp này là một trong các cha của nó, nếu không nó sẽ trả về giá trị Sai Các chương trình dưới đây minh họa hàm is_a()
Yes0 Yes1 Yes2 Yes3 Yes4_______0_______5 Yes6 Yes7 Yes8 Yes9 $a instanceof MyClass0 Yes0 $a instanceof MyClass2 $a instanceof MyClass3 Yes7_______10_______5 $a instanceof MyClass6 Yes0 $a instanceof MyClass8 $a instanceof MyClass9 Yes0 Yes1 Yes2 Yes1 $a instanceof MyClass3 Yes5 Yes6 Yes7 Yes4_______0_______9 // Short syntax (comparatively) $a instanceof MyClass is_a( $a, MyClass::class )0 Yes9 $a instanceof MyClass0 Yes0 // Short syntax (comparatively) $a instanceof MyClass is_a( $a, MyClass::class )4 đầu ra. Yestoán tử instanceof Toán tử instanceof được sử dụng trong PHP để tìm hiểu xem một đối tượng có phải là một thể hiện được khởi tạo của một lớp hay không cú pháp $a instanceof MyClass Toán hạng. Toán tử này chứa hai toán hạng được liệt kê bên dưới
Giá trị trả về. Nó trả về True nếu đối tượng thuộc lớp này hoặc có lớp này là một trong các cha của nó, nếu không nó sẽ trả về giá trị Sai lớp AnewClass mở rộng MyClass{} $an_obj = new AnewClass(); if($an_obj instanceof AnewClass) { echo "Đối tượng này là từ AnewClass \n"; /* Đối tượng cũng là một thể hiện của lớp nó được bắt nguồn từ */ if($an_obj instanceof MyClass) { echo "Đối tượng cũng từ MyClass "; Ghi chú. Bài đăng này đã hơn hai năm tuổi và vì vậy thông tin ở đây có thể đã lỗi thời. Nếu bạn phát hiện ra điều gì đó, vui lòng để lại nhận xét và chúng tôi sẽ cố gắng khắc phục Ngày 26 tháng 1 năm 2021 - thời gian đọc 9 phút Toán tử instanceof trong PHP rất hữu ích trong việc đảm bảo rằng bạn đang xem xét một loại đối tượng trước khi hành động với nó. Mặc dù nó rất dễ sử dụng, nhưng việc sử dụng nó có thể dẫn đến một số tác dụng phụ không mong muốn Như một ví dụ cơ bản, hãy tạo một vài giao diện và lớp để hiển thị hoạt động của toán tử instanceof. Thay vì chỉ có một số tên thử nghiệm, tôi đang sử dụng tên đối tượng mà bạn có thể tìm thấy trong hệ thống. Điều này bao gồm Người dùng và Đơn đặt hàng có thể tạo thành một phần của hệ thống thương mại
Nếu chúng ta khởi tạo đối tượng Người dùng, chúng ta có thể phát hiện xem người dùng có phải là một thể hiện của lớp Người dùng như thế này không
Khi đối tượng Người dùng triển khai một giao diện, chúng tôi cũng có thể phát hiện xem đối tượng Người dùng có phải là phiên bản của một giao diện như thế này không
Ngược lại, nếu chúng ta muốn xem biến $user mà chúng ta đã tạo có phải là một thể hiện của một loại đối tượng khác hay không thì nó sẽ trả về false, như thế này
Nếu chúng tôi không chắc chắn loại giao diện hoặc đối tượng nào chúng tôi sẽ nhận thì chúng tôi có thể chuyển vào một biến chứa tên của giao diện
Lưu ý rằng chỉ truyền vào giao diện dưới dạng một chuỗi, như trong đoạn mã sau, sẽ tạo ra lỗi cú pháp. Mục bạn sử dụng để phát hiện loại đối tượng hoặc giao diện phải là một biến hoặc tên lớp hoặc giao diện đủ điều kiện
Việc phủ định thể hiện của toán tử ít đơn giản hơn một chút, nhưng có thể được thực hiện bằng cách đặt dấu chấm than ở đầu câu lệnh
Thông thường, nên đặt toàn bộ nội dung trong ngoặc đơn để bạn có thể chắc chắn về kết quả kiểm tra
Bạn cũng có thể so sánh đầu ra của toán tử instanceof với false, điều này về cơ bản phủ định nó. Tôi thấy điều này khó đọc hơn một chút, mặc dù bạn cũng có thể lập luận rằng bạn có thể bỏ sót dấu chấm than
Khi các không gian tên có liên quan thì phải cẩn thận rằng sử dụng đúng cú pháp. Khi sử dụng không gian tên đủ điều kiện thì cần phải có dấu gạch chéo, nếu không sẽ không tìm thấy phiên bản phù hợp. Mặc dù vậy, có lẽ cách tốt nhất là không sử dụng không gian tên đủ điều kiện và chỉ dựa vào tên giao diện mà bạn đang tìm kiếm. Ví dụ sau đây đang xem giao diện Drupal có tên là FormStateInterface với ba cách viết tên lớp khác nhau
Một kiểm tra instanceof duy nhất là đủ dễ hiểu, nhưng nếu bạn đang cố gắng phát hiện xem một đối tượng có phải là một trong một loạt các loại đối tượng hay không thì mã sẽ hơi khó đọc. Ví dụ: giả sử bạn đang cố gắng phát hiện xem một đối tượng có phải là một trong ba loại giao diện được xác định ở đầu bài hay không; 0Điều này trả về true, điều này cho biết rằng đối tượng là một trong các loại thể hiện mà chúng tôi đang tìm kiếm Tôi đã tìm thấy một chức năng tốt cho phép nó được đóng gói gọn gàng trong khi đọc tràn ngăn xếp vào ngày khác (xem bình luận tràn ngăn xếp ban đầu tại đây). Để phát hiện xem một đối tượng có thuộc một trong các loại hay không, bạn có thể sử dụng hàm sau sẽ lấy một đối tượng và một mảng tên lớp 1Điều này có thể được chạy theo cách sau. Chuyển vào đối tượng người dùng đã tạo trước đó và một mảng chứa các loại phiên bản mà chúng tôi đang tìm kiếm dưới dạng chuỗi trả về true 2Toán tử instanceof cũng sẽ hoạt động đối với các đối tượng con. Lấy đoạn mã sau để tạo giao diện, xác định lớp Người dùng và sau đó xác định lớp Quản trị viên mở rộng lớp Người dùng 3Chúng tôi có thể khởi tạo các đối tượng Người dùng và Quản trị viên và cố gắng phát hiện chúng theo những cách khác nhau. 4Điều cần lưu ý từ đoạn mã trên là đối tượng Người dùng không phải là phiên bản của đối tượng Quản trị viên và do đó so sánh trả về sai. Tuy nhiên, đối tượng Quản trị viên là một thể hiện của đối tượng Người dùng và do đó so sánh là đúng Điều gì xảy ra sau đó, nếu chúng ta đang cố gắng phát hiện thể hiện của chỉ một đối tượng Quản trị viên chứ không phải đối tượng Người dùng. Thật không may, toán tử instanceof không thể được sử dụng ở đây. Thay vào đó, để phát hiện chỉ một loại lớp mà bạn đang tìm kiếm, bạn sẽ cần sử dụng phép so sánh khác bằng cách sử dụng phương thức get_class() PHP 5Lưu ý rằng đối tượng Người dùng không phải là đối tượng Quản trị viên và do đó, phép so sánh trả về sai. Phần trên cũng có thể được viết khác đi bằng cách sử dụng. hằng số ma thuật lớp để trả về chuỗi tên lớp. Đây thực sự là cách tôi thường in tên lớp và cách tôi viết kiểu so sánh này 6Cuối cùng, toán tử instanceof rất hữu ích, nhưng bạn cần tuân theo các quy tắc này để tận dụng tối đa nó
PHP PHP OOP CHẤT RẮN dụ của Được viết bởi. Philip Norton Phil là người sáng lập và quản trị viên của #. viết mã và là một chuyên gia CNTT làm việc ở Tây Bắc Vương quốc Anh. Tốt nghiệp năm 2003 tại Đại học Aberystwyth với bằng Thạc sĩ Khoa học Máy tính Phil trước đây đã từng làm quản trị viên cơ sở dữ liệu, trên bàn trợ giúp CNTT, huấn luyện viên hệ thống, kiến trúc web, tư vấn khả năng sử dụng, blogger và chuyên gia SEO. Phil có nhiều kinh nghiệm xây dựng và duy trì các trang web PHP cũng như làm việc với các công nghệ liên quan như JavaScript, HTML, CSS, XML, Flex, Apache, MySQL và Linux |