在过去的几个晚上,我重构了File_Fortune以让它实现Iterator
、Countable
和ArrayAccess
—基本上允许它像一个大多数意图和目的的数组。因此,我消除了对File_Fortune_Writer
包的需求,并大大简化了使用。
(注意:当然,File_Fortune
可能没什么大不了的,但在过去两年中超过1000次的下载表明有人正在使用它。另外,它为家庭网站上的随机引述。:-))
举几个例子:
require_once 'File/Fortune.php'; // Initialize and point it to a directory of fortunes $fortunes = new File_Fortune('/path/to/fortunedir'); // Retrieve a random fortune // (works with either a directory or a single fortune file) echo $fortunes->getRandom(); // Set to a specific fortune file: $fortunes->setFile('myfortunes'); // Loop through and print all fortunes foreach ($fortunes as $fortune) { echo str_repeat('-', 72), "\n", $fortune, "\n\n"; } // Hmmm.. let's change one: $fortunes[7] = "I never really liked that fortune anyways."; // No need to explicitly save, as it's done during __destruct(), // but if you really want to: $fortunes->save(); // Let's add a new fortune: $fortunes->add('This is a shiny new fortune!'); // and now we'll verify it exists: $index = count($fortunes) - 1; echo $fortunes[$index];
总而言之,这是一个更好的界面。经验教训:从其他语言移植代码时,花些时间确定您自己的API是否更好是值得的。
在即将发布的版本中,我希望修改后端以使用PHP的StreamsAPI而不是直接文件访问,并且还允许明确提供一个fortunefiles列表。之后,我应该为初始稳定版本做好准备。
更新(2007-07-10):修复了示例中的解析错误