In diesem Artikel werden hauptsächlich die vordefinierten Schnittstellen von PHP erläutert, die häufig in täglichen Projekten verwendet werden: IteratorAggregate (Aggregate-Iterator-Iterator), Countable, ArrayAccess und Iterator.
Es gibt mehrere vordefinierte Schnittstellen in PHP, die vier am häufigsten verwendeten Schnittstellen (IteratorAggregate (Aggregate Aggregate Iterator Iterator) , Countable, ArrayAccess, Iterator) werden Ihnen jeweils ausführlich vorgestellt.
IteratorAggregate (Aggregate-Iterator-Iterator)-Schnittstelle
IteratorAggregate extends Traversable { abstract public Traversable getIterator(void) }
Diese Schnittstelle implementiert eine Funktion – das Erstellen eines externen Iterators im Einzelnen, wenn wir When verwenden foreach durchläuft ein Objekt. Wenn es die IteratorAggregate-Schnittstelle nicht erbt, durchläuft es alle öffentlichen Eigenschaften im Objekt (es kann nur in der Form einer öffentlichen $var vorliegen). Wenn Sie IteratorAggregate erben, wird das von der in der Klasse implementierten getIterator-Methode zurückgegebene Objekt verwendet. Beachten Sie hier, dass das zurückgegebene Objekt ein Traversable-Objekt sein muss vom Traversable-Objekt erweitern, andernfalls wird eine Ausnahme ausgelöst
//看个例子 class My{ private $_data = [ 'a' => '燕睿涛', 'b' => 'yanruitao', 'c' => 'LULU', ]; public function getIterator() { return new ArrayIterator($this->_data); } } $obj = new My; foreach ($obj as $key => $value) { echo "$key => $value\n"; } //输出结果为空 class My implements IteratorAggregate { private $_data = [ 'a' => '燕睿涛', 'b' => 'yanruitao', 'c' => 'LULU', ]; public function getIterator() { return new ArrayIterator($this->_data); } } $obj = new My; foreach ($obj as $key => $value) { echo "$key => $value\n"; } //结果: a => 燕睿涛 b => yanruitao c => LULU
Zählbare Schnittstelle
Countable { abstract public int count(void) }
Diese Schnittstelle wird verwendet, um die Anzahl der Objekte zu zählen. Wie ist das konkret zu verstehen? Wenn wir count für ein Objekt aufrufen und die Funktion Countable nicht erbt, gibt sie immer 1 zurück. Wenn sie Countable<🎜 erbt > wird der implementierte count zurückgegeben. Die von der -Methode zurückgegebene Zahl sehen Sie sich das folgende Beispiel an:
class CountMe { protected $_myCount = 3; public function count() { return $this->_myCount; } } $countable = new CountMe(); echo count($countable); //返回1 class CountMe implements Countable { protected $_myCount = 3; public function count() { return $this->_myCount; } } $countable = new CountMe(); echo count($countable); //返回3 ArrayAccess接口 ArrayAccess { abstract public boolean offsetExists(mixed $offset) abstract public mixed offsetGet(mixed $offset) public void offsetSet(mixed $offset, mixed $value) public void offsetUnset(mixed $offset) } class CountMe { protected $_myCount = 3; public function count() { return $this->_myCount; } } $countable = new CountMe(); echo count($countable); //返回1 class CountMe implements Countable { protected $_myCount = 3; public function count() { return $this->_myCount; } } $countable = new CountMe(); echo count($countable); //返回3
ArrayAccess-Schnittstelle
ArrayAccess { abstract public boolean offsetExists(mixed $offset) abstract public mixed offsetGet(mixed $offset) public void offsetSet(mixed $offset, mixed $value) public void offsetUnset(mixed $offset) }
class myObj { } $obj = new myObj; $obj['name']; //Fatal error: Cannot use object of type myObj as array in class myObj implements ArrayAccess { public function offsetSet($offset, $value) { echo "offsetSet : {$offset} => {$value}\n"; } public function offsetExists($offset) { echo "offsetExists : {$offset}\n"; } public function offsetUnset($offset) { echo "offsetUnset : {$offset}\n"; } public function offsetGet($offset) { echo "offsetGet : {$offset}\n"; } } $obj = new myObj; $obj[1] = '燕睿涛'; isset($obj['name']); unset($obj['name']); $obj['yrt']; //输出结果: offsetSet : 1 => 燕睿涛 offsetExists : name offsetUnset : name offsetGet : yrt class myObj implements ArrayAccess { private $_data = []; public function offsetSet($offset, $value) { $this->_data[$offset] = $value; } public function offsetExists($offset) { return isset($this->_data[$offset]); } public function offsetUnset($offset) { unset($this->_data[$offset]); } public function offsetGet($offset) { return $this->_data[$offset]; } } $obj = new myObj; $obj['yrt'] = '燕睿涛'; var_dump($obj['yrt']); var_dump(isset($obj['yrt'])); unset($obj['yrt']); var_dump(isset($obj['yrt'])); var_dump($obj['yrt']); //输出: string(9) "燕睿涛" bool(true) bool(false) Notice: Undefined index: yrt //最后一个会报出Notice
IteratorAggregateforeach:
class myObj implements ArrayAccess, IteratorAggregate { private $_data = []; public function getIterator() { return new ArrayIterator($this->_data); } ...... } $obj = new myObj; $obj['yrt'] = '燕睿涛'; $obj[1] = '燕睿涛'; $obj['name'] = '燕睿涛'; $obj['age'] = 23; foreach ($obj as $key => $value) { echo "{$key} => {$value}\n"; } //输出: yrt => 燕睿涛 1 => 燕睿涛 name => 燕睿涛 age => 23
Iterator extends Traversable {
abstract public mixed current(void)
abstract public scalar key(void)
abstract public void next(void)
abstract public void rewind(void)
abstract public boolean valid(void)
}
(Dokument: Erstellen einer externen Iteratorschnittstelle, die Schnittstelle gibt direkt einen Iterator zurück) ähneln, aber dies wird von selbst in der Klassendefinition implementiert Schauen Sie sich ein Beispiel an: Zusammenfassung Verwandte Empfehlungen: Das obige ist der detaillierte Inhalt vonPHP-vordefinierte Schnittstellenanalyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!class myObj implements Iterator{
private $_data = [];
public function __construct(Array $arr)
{
$this->_data = $arr;
}
public function current()
{
return current($this->_data);
}
public function key()
{
return key($this->_data);
}
public function next()
{
next($this->_data);
}
public function rewind()
{
reset($this->_data);
}
public function valid()
{
return $this->key() !== NULL;
}
}
$t = [
'yrt' => '燕睿涛',
'name' => '燕睿涛',
false,
'燕睿涛'
];
$obj = new myObj($t);
foreach ($obj as $key => $value) {
echo "{$key} => ".var_export($value, true)."\n";
}
//输出:
yrt => '燕睿涛'
name => '燕睿涛'
0 => false
1 => '燕睿涛'
Das Obige ist der gesamte Inhalt dieses Artikels . Das Lernen aller ist hilfreich. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website!