[pmwiki-devel] preg dot question...
The Editor
editor at fast.st
Fri Dec 8 09:33:42 CST 2006
On 12/8/06, Patrick R. Michaud <pmichaud at pobox.com> wrote:
> On Fri, Dec 08, 2006 at 03:20:34AM -0500, The Editor wrote:
> > On 12/7/06, Patrick R. Michaud <pmichaud at pobox.com> wrote:
> > >BTW, I've noticed this throughout the ZAP code, where things that
> > >ought to be strings aren't placed in quotes. That's generally not
> > >a good idea, because one never knows when a word will accidentally
> > >end up being a PHP function or having a meaning other than being
> > >a bareword string.
> >
> >
> > Ahhh, great Pm! Thank you so much. Makes sense now. Could you be a
> > bit more specific about the kinds of places things ought to be in
> > quotes, and I'll plow my way through and try to make the corrections?
>
> Just browsing quickly through the zap.php code, the biggest item
> I see is the lack of quotes around string literal indexes in
> arrays. For example, ZAP has:
>
> if (!isset($_POST[nextpage])) $_POST[nextpage] = $pagename;
>
> which really should be
>
> if (!isset($_POST['nextpage'])) $_POST['nextpage'] = $pagename;
>
> Why? From [1]:
>
> You should always use quotes around a string literal array index.
> For example, use $foo['bar'] and not $foo[bar]. But why is
> $foo[bar] wrong? [...] The reason is that this code has an
> undefined constant (bar) rather than a string ('bar' - notice
> the quotes), and PHP may in future define constants which,
> unfortunately for your code, have the same name. It "works"
> because PHP automatically converts a bare string (an unquoted
> string which does not correspond to any known symbol) into a
> string which contains the bare string.
>
> ...but it works only as long as the symbol is unknown. If the
> bare string ever does become defined (e.g., in a future version
> of PHP, another recipe, an external library, or by some other
> application such as PmWiki), then the index will no longer work.
>
> There are also a few places where there are unnecessary quotes:
>
> $rr2 = array("$pn[1]","$pn[0]","$GLOBALS[Author]","$e","$ee","$t","Profiles");
>
> This should probably read:
>
> $rr2 = array($pn[1], $pn[0], $GLOBALS['Author'], $e, $ee, $t, 'Profiles');
>
> There's generally little point in putting quotes around a single
> variable -- it just gives the PHP processor more work to do.
> (However, don't feel bad, lots of new programmers tend to do this.)
>
> One last item -- several places identify $_POST as a global variable:
>
> global $m, $_POST;
>
> $_POST (and $_SERVER, $_GET, $_COOKIE, $_SESSION, etc.) are known
> as "superglobals", in that they're automatically global to every
> function without having to be explicitly declared as such. I don't
> think it's necessarily wrong to declare $_POST as global, but
> some PHP programmers would look oddly at it.
>
> Hope this helps,
>
> Pm
>
> 1. http://us2.php.net/manual/en/language.types.array.php#language.types.array.donts
Thanks so much Pm for looking at the code. I really appreciate it.
I'll make the changes for the next release. I've enjoyed working with
PmWiki very much and have learned more than I ever imagined.
Feel free to point out any other suggestions. If people are going to
be using ZAP (and some are) I want to make sure it works as well as
possible, so there's no chance of any negative reflections on your
fine wiki system.
Cheers,
Caveman
More information about the pmwiki-devel
mailing list