Upgrading to PHP 5 by Adam Trachtenberg The unconfirmed error reports are from readers. They have not yet been approved or disproved by the author or editor and represent solely the opinion of the reader. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification This page was updated April 17, 2008. UNCONFIRMED errors and comments from readers: [11] Last Code Block; class Person { setName($name) {... should be: class Person { function setName($name) {. {18} in the 6th paragraph; sendEmailTo function should be using the parameter $rasmus2 rather than the quoted $rasmus {27} last code block (end of para 8); The decimal separator should be a full stop, not a comma. The thousands separator should be a comma, not a full stop. {32} last paragraph; It is quite possible (and useful) to create an abstract class without any abstract methods. At least it works. Can't find any other resource that supports your statement that "Abstract classes must contain at least one method that is also marked abstract". Please correct me if I'm wrong. [33] First code block (3rd para); The methods in the extension class have parameters, the methods in the abstract class do not. The extension class produces a fatal error. {36} examples at top and middle of page; ALL references to diameter should be to circumference. diameter is 2 * radius circumference is 2 * pi * radius {36} Code starting at Top and repeated in middle of page ; perimeter, not diameter, is defined by 2*pi*radius (63) first and second code examples; regarding stmt->bind_result. The php.net online documentation state that stmt->bind_result() sould be issued EFTER bind_result and BEFORE any stmt->fetch() commands. {62-63} Example 3-4; This may not be a problem, but in your example 3-4 stmt_bind_result is carried out before stmt_bind_execute. I'm using your book to move to PHP5 and I tried your example (bind then execute then fetch) and it works OK. On checking something in the online manual (http://uk3.php.net/manual/en/function.mysqli-stmt-bind- result.php) I notice that it says explicitly in a note that bind should be carried out AFTER execute and BEFORE fetch. This works fine as well on my simple test example. But there must be a reason for the online manual (which is usually bomb-proof) saying what it does. [138] last paragraph; Adam states "xpath() returns SimpleXML objects, ..." But in my experience and testing xpath() returns arrays. Using Adam's example: ------------------------- $s = simplexml_load_file('address-book.xml'); $people = $s->xpath('/address-book/person'); echo gettype($people)."\n\n"; --------------------------- result is "array" [266] 1; class addressBook implements IteratorAggregate{ } This class implements IteratorAggregate but the author does not include the required function: public function getIterator() { return new ArrayObject($this->data); } this results in an abstract class error failure to implement all methods. He wrote the method on page 263 and mentioned that it was required, but it wasn't in the addressBook class