From: mail at iaindooley dot com Operating system: FreeBSD 4.7 PHP version: 4.3.4 PHP Bug Type: Variables related Bug description: Variable assignment produces errors
Description: ------------ i'm sorry if this bug report sounds strange, but this is a very strange bug. if it is indeed a bug. a problem with this is that in order to reproduce the bug you would have to install all the ancestor classes to run the code, but i think you will get a good idea of what is going wrong from my description below. basically, this method is part of a DBSelectQuery class that is just a convenience class for building database queries on the fly. The particular method in question is being used in many many other places without errors. Reproduce code: --------------- /** * Add a clause to this query * @param clause - a DBClause object */ function setClause($db_clause) { if($db_clause!="") { $str = $db_clause->toString(); $this->clause = $str; } } Expected result: ---------------- the expected result would be that the member variable 'clause' of the query object would now have the value of the $db_clause object's toString() method. Actual result: -------------- if the code is executed as it is above, i get the error: Fatal error: Call to a member function on a non-object in /usr/home/iain/public_html/sitekitchen/classes/db/dbselectquery.class.inc on line 101 Line 101 is the line with the call: $str = $db_clause->toString(); So one would assume that $db_clause is somehow not an object. However, if i comment out the line that assigns the variable $str to $this->clause, then there is no error. ie. the code now looks like this: /** * Add a clause to this query * @param clause - a DBClause object */ function setClause($db_clause) { if($db_clause!="") { $str = $db_clause->toString(); echo($str); //$this->clause = $str; } } And i get the following printed out to the screen: WHERE functionid = '34' which is the expected result of the $db_clause object's toString() method, so it is clearly an object. Please bare in mind here, that the 'Call to a member function on a non-object" error is _not_ occuring on the line that i have commented out above. Commenting out this line prevents the error from occuring in the _previous_ line!!! also, if i assign some other random string to $this->clause, ie. the code now looks like this: /** * Add a clause to this query * @param clause - a DBClause object */ function setClause($db_clause) { if($db_clause!="") { $str = $db_clause->toString(); echo($str); $this->clause = "some random string"; } } then the code is fine (apart from the fact that the database query doesn't work because it has the words "some random string" instead of a where clause!) i am also able to assign the variable $str to some other random variable, ie: /** * Add a clause to this query * @param clause - a DBClause object */ function setClause($db_clause) { if($db_clause!="") { $str = $db_clause->toString(); $some_random_variable = $str; echo($str."<br>".$some_random_variable); $this->clause = "some random string"; } } this gives the expected output: WHERE functionid = '34' WHERE functionid = '34' i seriously feel like i am taking crazy pills. if you need some more info, let me know. -- Edit bug report at http://bugs.php.net/?id=27358&edit=1 -- Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=27358&r=trysnapshot4 Try a CVS snapshot (php5): http://bugs.php.net/fix.php?id=27358&r=trysnapshot5 Fixed in CVS: http://bugs.php.net/fix.php?id=27358&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=27358&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=27358&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=27358&r=needscript Try newer version: http://bugs.php.net/fix.php?id=27358&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=27358&r=support Expected behavior: http://bugs.php.net/fix.php?id=27358&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=27358&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=27358&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=27358&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=27358&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=27358&r=dst IIS Stability: http://bugs.php.net/fix.php?id=27358&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=27358&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=27358&r=float