Robin Johnson wrote:
On Mon, 22 Jul 2002, Div Loïc wrote:
Robin, I've just have had a look at the last version of your parser. Here is some PHP3 problems i've noticed:
- function must be declared before they are
called. Then, for example, you can't call "PMA_sqlParser_ArrayAdd_Timer()" in the "PMA_sqlParser_ArrayAdd()" function because the former is declared after the latter;
How does one deal with recursive functions then ? PMA_sqlParser_isEscaped() used to be recursive, but I found it slightly faster as iterative (not that much).
I don't think this is a problem in PHP3: when you call a function from within itself, is has been declared at a higher point in the source.
- "include_once" and "require_once" are PHP4
functions;
- "===" and "!==" are PHP4 operators.
How does one then properly evaluate some expressions? $f = FALSE; $g = 0
($f == FALSE) -> true ($g == FALSE) -> true ($f === FALSE) -> true ($g === FALSE) -> false
My code relies on this difference, as some of the PHP functions (strpos namely) return FALSE for not found, and integers [0-strlen).
In that case, a 0 is the first position of the string, which is distinctly different from FALSE.
The is_integer() test will give false on $f and true on $g. Not funny but is works. is_bool() in a PHP4 function.
One of your changes: function PMA_sqlParser_strInStr($needle,$haystack) {
- return (strpos($haystack,$needle) !== FALSE);
-}
- return (strpos(' ' . $haystack, $needle) > 0);
+} // end of the "PMA_sqlParser_strInStr()" function
Actually breaks the function, stopping it from recognizing some things.
It's a trick to avoid having a 0 in first position, but I guess the is_integer() trick can be used.