📄 iterator_037.phpt
字号:
--TEST--SPL: CachingIterator and __toString--SKIPIF--<?php if (!extension_loaded("spl")) print "skip"; ?>--FILE--<?phpfunction test($ar, $flags){ echo "===$flags===\n"; $it = new CachingIterator($ar, 0); try { $it->setFlags($flags); } catch (Exception $e) { echo 'Exception: ' . $e->getMessage() . "\n"; var_dump($it->getFlags()); return; } var_dump($it->getFlags()); try { foreach($it as $v) { var_dump((string)$it); } } catch (Exception $e) { echo 'Exception: ' . $e->getMessage() . "\n"; }}class MyItem{ function __construct($value) { $this->value = $value; } function __toString() { return (string)$this->value; }}class MyArrayIterator extends ArrayIterator{ function __toString() { return $this->key() . ':' . $this->current(); }}$ar = new MyArrayIterator(array(1, 2, 3));test($ar, CachingIterator::CALL_TOSTRING);test($ar, CachingIterator::TOSTRING_USE_KEY);test($ar, CachingIterator::TOSTRING_USE_CURRENT);$ar = new MyArrayIterator(array(new MyItem(1), new MyItem(2), new MyItem(3)));test($ar, CachingIterator::TOSTRING_USE_INNER);test($ar, CachingIterator::CALL_TOSTRING | CachingIterator::TOSTRING_USE_KEY);test($ar, CachingIterator::CALL_TOSTRING | CachingIterator::TOSTRING_USE_CURRENT);test($ar, CachingIterator::CALL_TOSTRING | CachingIterator::TOSTRING_USE_INNER);test($ar, CachingIterator::TOSTRING_USE_KEY | CachingIterator::TOSTRING_USE_CURRENT);test($ar, CachingIterator::TOSTRING_USE_KEY | CachingIterator::TOSTRING_USE_INNER);echo "===X===\n";try{ $it = new CachingIterator($ar, CachingIterator::CALL_TOSTRING); $it->setFlags(0);}catch (Exception $e){ echo 'Exception: ' . $e->getMessage() . "\n";}try{ $it = new CachingIterator($ar, CachingIterator::TOSTRING_USE_INNER); $it->setFlags(0);}catch (Exception $e){ echo 'Exception: ' . $e->getMessage() . "\n";}?>===DONE===--EXPECTF-- ===1===int(1)string(1) "1"string(1) "2"string(1) "3"===2===int(2)string(1) "0"string(1) "1"string(1) "2"===4===int(4)string(1) "1"string(1) "2"string(1) "3"===8===int(8)string(3) "0:1"string(3) "1:2"string(3) "2:3"===3===Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNERint(0)===5===Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNERint(0)===9===Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNERint(0)===6===Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNERint(0)===10===Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNERint(0)===X===Exception: Unsetting flag CALL_TO_STRING is not possibleException: Unsetting flag TOSTRING_USE_INNER is not possible===DONE===--UEXPECTF-- ===1===int(1)unicode(1) "1"unicode(1) "2"unicode(1) "3"===2===int(2)unicode(1) "0"unicode(1) "1"unicode(1) "2"===4===int(4)unicode(1) "1"unicode(1) "2"unicode(1) "3"===8===int(8)unicode(3) "0:1"unicode(3) "1:2"unicode(3) "2:3"===3===Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNERint(0)===5===Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNERint(0)===9===Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNERint(0)===6===Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNERint(0)===10===Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNERint(0)===X===Exception: Unsetting flag CALL_TO_STRING is not possibleException: Unsetting flag TOSTRING_USE_INNER is not possible===DONE===
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -