Re: [PEPr] Comment on Web Services::Livejournal

From: Date: Fri, 10 Mar 2006 09:35:08 +0000
Subject: Re: [PEPr] Comment on Web Services::Livejournal
References: 1  Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-41741@lists.php.net to get a copy of this message
Justin, I have just updated the code. New code is linked here. I have changed it according to your comments. http://pear.php.net/pepr/pepr-proposal-show.php?id=360 Can you check it out? Nikita. Justin Patrin wrote: > Justin Patrin (http://pear.php.net/user/justinpatrin) has commented on the proposal for Web > Services::Livejournal. > > Comment: > > I have not checked through all of your code, but I have enough comments for > this round. You have a lot to work on. > > > > set_time_limit() shouldn't be called in the include file, and especially > not just when it's included. You should instead put a warning in the > documentation that tells people to make sure their time limit is set > high. > > > > Please use single quotes instead of double quotes for strings: > > http://pear.reversefold.com/strings/ > > > > Lower case language constants are preferred (true, false). > > > > There is some strange indentation in your files. Make sure that you're > indenting with four spaces and no tabs. See the PEAR CS section for more. > > > > trigger_error is not allowed in PEAR packages. For PHP5 packages use > PEAR_Exception for all error handling. > > > > Don't check the PHP version on runtime. The installer will check for the > required version of PHP when the package is installed. > > > > Don't use register_shutdown_function. It is especially useless for > disconnecting from a database (or closing any resource) as PHP will do > this at the end of the script anyway. If you want a destructor, use > __destruct. > > > > It would be helpful to allow the user to pass in their own DB object (in > which case the destructor above would be harmful). > > > > Please review your class and file structure. Class names must map directly > to paths e.g. Services_LiveJournal_Common Services/LiveJournal/Common.php. > > > > You don't need & when setting an object to a variable, such as with > $this->dbh = &DB::connect(). PHP5 uses references automatically for all > objects. > > > > There should alsways be spaces around operators such as =, +, -, *, =>, > ',', etc. > > > > Long lines should be wrapped at around 40 chars. > > > > Declare arrays before using them: > > $data = array(); > > $data['response'] = ''; > > > > Declare arrays in one call instead of multiple. E.g.: > > > > $data["response"]=""; > > $data["replyto"]=$replyto; > > $data["parenttalkid"]=$parenttalkid; > > > > Should be: > > > > $data = array('response' => '', > > 'replyto' => $replyto, > > 'parenttalkid' => $parenttalkid); > > > > You don't need to unset() variables when they're no longer in use, > especially when it it just at the end of a function. PHP will clean up > local variables for you. The many unset() calls in your code are > cluttering it up and are simply unneccesary in almost all cases. > > > > Use DB's quoteIdentifier() to quote table and field names instead of > hard-coding the (only mysql knows ). Use quoteSmart() instead > of > hard-coding '. > > e.g.: > > 'SELECT max('.$db->quoteIdentifier('id'). > > ') FROM '.$db->quoteIdentifier('lj_comments'). > > ' WHERE '.$db->quoteIdentifier('journal'). > > ' = '.$db->quoteSmart($this->_main->settings['username']) > > > > When querying for a single row use getRow() instead of query(), > fetchRow(), and free(). > > > > When querying for a single value use $db->getOne(). > > > > $comments_data[(string)intval($row[0])] is far too convoluted. First, > (string) does nothing as intval() is creating an integer and PHP treats > integer strings as integers when used as an array key. > > $array = array(); > > $array['2'] = 1; > > $array['02'] = 2; > > foreach ($array as $key => $val) { > > echo var_dump($key); > > } > > Second, forcing the key as an integer here really serves no purpose as > your DB table has the id field as an integer already and you will get an > integer back. > > > > You most certainly do not need to do this: > > $comments_data[(string)intval($row[0])] = array("parentid"=>$row[1], > > "subject"=>$row[2], > > "body"=>$row[3], > > "date"=>$row[4], > > "status"=>$row[5], > > "poster"=>$row[6]); > > Use DB_FETCHMODE_ASSOC instead. > > > > All output of variables into XML needs to be escaped unless it was > previously escaped or sanitized. Use htmlentities() with ENT_QUOTES for > attributes: > > '<comment level="'.htmlentities($comment['level'], > ENT_QUOTES).'">' > > And use plain htmlentities() when text is not in an attribute. > > '<comment>'.htmlentities($text).'</comment>' > > > > Private functions need full docblocks too. > > > > Debugging would be better done through the Log package instead of always > to STDERR IMHO. > > Proposal information: > http://pear.php.net/pepr/pepr-proposal-show.php?id=360 >

« previous php.pear.dev (#41741) next »