mirror of
https://github.com/php/php-src.git
synced 2024-12-12 19:33:31 +08:00
.. | ||
examples | ||
tests | ||
config.m4 | ||
CREDITS | ||
EXPERIMENTAL | ||
php_spl.c | ||
php_spl.h | ||
README | ||
spl_array.c | ||
spl_array.h | ||
spl_engine.c | ||
spl_engine.h | ||
spl_foreach.c | ||
spl_foreach.h | ||
spl_functions.c | ||
spl_functions.h | ||
spl.php | ||
TODO |
<pre> This is an extension that aims to implement some efficient data access interfaces and classes. SPL allows to hook into foreach. Doing so you can do something like this: $obj = new whatever(); foreach($obj as $key => $value) { ... } This is meant to be used for database access. For example you could grab my patch to sqlite (<a href="http://marcus-boerger.de/php/ext/sqlite/">http://marcus-boerger.de/php/ext/sqlite/</a>) and look at the oo tests: $db = new sqlite($filename); foreach($db->query("SELECT....") as $row) { ... } SQLite offers four access strategies: 1) sqlite_query + sqlite_fetch_array 2) sqlite_unbuffered_query + sqlite_fetch_array 3) sqlite_query + iterators (sqlite_current) 4) sqlite_unbuffered_query + iterators (sqlite_current) 1) and 3) do "over eager evaluating" since they fetch all rows directly. 2) does "eager evaluating". It always fetches the next row but doesn't keep the current row, so that it must be stored elsewhere if it must be accessed more then once. For instance this happens when you need to access columns separately. 4) does "eager evaluating". But in contrast to 2) it keeps the current row hence its name. There is no efficient way for "lazy or just in time evaluating" so 4) should be the best case. And 4) also enables the foreach trick. To implement 3) and 4) with other db extensions ask me and wait for LT to pass. </pre>