


Introduction to the 6 predefined interfaces in PHP_PHP Tutorial
Introduction to the 6 predefined interfaces in PHP
This article mainly introduces the introduction to the 6 predefined interfaces in PHP. This article explains Traversable, Iterator, IteratorAggregate, and ArrayAccess , Serializable, Closure, friends in need can refer to it
PHP predefined 6 interfaces are introduced as follows:
1.Traversable traversal interface
Haha! In fact, it is not an interface that can be used in PHP. Only internal classes can be used. One of its uses is to detect whether a class can be traversed.
?
2 3
|
|
1 2 3 4 5 6 7 8 9 10 11 12 13 | Iterator extends Traversable { //Return the element pointed to by the current index cursor abstract public mixed current(void) //Returns the key name of the element pointed to by the current index cursor abstract public scalar key(void) //Move the current index cursor to point to the next element abstract public void next(void) //Reset the index cursor to point to the first element abstract public void rewind(void) //Determine whether the current index cursor points to an element, often used when calling rewind() or next() abstract public boolean valid(void) } |
The above allows a class to implement a basic iteration function. You can see the calling sequence of iteration as follows:
?
2 3 4
|
class myIterator implements Iterator { private $position = 0 ; private $array = array( "firstelement" , "secondelement" , "lastelement" , ); public function __construct () { $this -> position = 0 ; } function rewind () { var_dump ( __METHOD__ ); $this -> position = 0 ; } function current () { var_dump ( __METHOD__ ); return $this -> array [ $this -> position ]; } function key () { var_dump ( __METHOD__ ); return $this -> position ; } function next () { var_dump ( __METHOD__ ); $this -> position ; } function valid () { var_dump ( __METHOD__ ); return isset( $this -> array [ $this -> position ]); } } $it = new myIterator ; foreach( $it as $key => $value ) { var_dump ( $key , $value ); echo "n" ; } |
1 2 3 4 5 | IteratorAggregate extends Traversable { //Get external iterator abstract public Traversable getIterator ( void ) } |
getIterator is an instance of a class of Iterator or Traversable interface. Obtain the external iterator as follows to implement iterative access.
?
2 3 4
|
class myData implements IteratorAggregate { public $property1 = "Public property one" ; public $property2 = "Public property two" ; public $property3 = "Public property three" ; public function __construct () { $this -> property4 = "last property" ; } public function getIterator () { return new ArrayIterator ( $this ); } } $obj = new myData ; foreach( $obj as $key => $value ) { var_dump ( $key , $value ); echo "n" ; } |
1 2 3 4 5 6 7 | ArrayAccess { /* Method */ abstract public boolean offsetExists (mixed $offset) //Check whether the offset position exists abstract public mixed offsetGet ( mixed $offset ) //Get the value of an offset position abstract public void offsetSet ( mixed $offset , mixed $value ) //Set the value of an offset position abstract public void offsetUnset (mixed $offset) //Reset the value of an offset position } |
The object can be accessed like an array as follows:
?
2 3 4
|
class obj implements arrayaccess { private $container = array(); public function __construct () { $this -> container = array( "one" => 1 , "two" => 2 , "three" => 3 , ); } public function offsetSet ( $offset , $value ) { if ( is_null ( $offset )) { $this -> container [] = $value ; } else { $this -> container [ $offset ] = $value ; } } public function offsetExists ( $offset ) { return isset( $this -> container [ $offset ]); } public function offsetUnset ( $offset ) { unset( $this -> container [ $offset ]); } public function offsetGet ( $offset ) { return isset( $this -> container [ $offset ]) ? $this -> container [ $offset ] : null ; } } $obj = new obj ; var_dump (isset( $obj [ "two" ])); var_dump ( $obj [ "two" ]); unset( $obj [ "two" ]); var_dump (isset( $obj [ "two" ])); $obj [ "two" ] = "A value" ; var_dump ( $obj [ "two" ]); $obj [] = 'Append 1' ; $obj [] = 'Append 2' ; $obj [] = 'Append 3' ; print_r ( $obj ); |
1 2 3 4 5 6 | Serializable { /* Method */ abstract public string serialize (void) //String representation of the object abstract public mixed unserialize ( string $serialized ) // Construct object } |
Classes that implement this interface no longer support __sleep() and __wakeup(). Usage is very simple, as long as the serialize method is called when the object is serialized, and the unserialize method is called when deserializing.
?
2 3 4
5
15 16
17
18
19
20
21
|
class obj implements Serializable { private $data ; public function __construct () { $this -> data = "My private data" ; } public function serialize () { return serialize ( $this -> data ); } public function unserialize ( $data ) { $this -> data = unserialize ( $data ); } public function getData () { return $this -> data ; } } $obj = new obj ; $ser = serialize ( $obj ); print_r($ser); $newobj = unserialize ( $ser ); print_r($newobj); |
1 2 3 4 5 6 | Closure { /* Method */ __construct (void) //Constructor used to prohibit instantiation public static Closure bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] ) //Copy a closure and bind the specified $this object and class scope. public Closure bindTo ( object $newthis [, mixed $newscope = 'static' ] ) //Copy the current closure object and bind the specified $this object and class scope. } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class A { private static $sfoo = 1 ; private $ifoo = 2 ; } $cl1 = static function() { return A :: $sfoo ; }; $cl2 = function() { return $this -> ifoo ; }; $bcl1 = Closure :: bind ( $cl1 , null , 'A' ); $bcl2 = Closure :: bind ( $cl2 , new A (), 'A' ); echo $bcl1 (), "n" ; echo $bcl2 (), "n" ; |

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
