[Off topic] PHP syntax is (version && context) dependent

PHP accepts or rejects certain syntax depending on the context.

Let's hope you never have to deal with things like this.

Note: I use CakePHP.

Take this array declaration, designed to be the 2nd param in a
call to filter_var() or filter_var_array():

$options = array
(
'filter' => FILTER_SANITIZE_STRING,
'flags' => FILTER_FLAG_NO_ENCODE_QUOTES
| FILTER_FLAG_STRIP_BACKTICK
| FILTER_FLAG_STRIP_HIGH
| FILTER_FLAG_STRIP_LOW,
);

If you use this in the body or in a function in a simple program,
it works under PHP V 5.5.9 and 5.6.30.

If you use it in a function within a class it works under the same
versions.

But if you declare it as a private variable at the head of a class,
it works under V 5.6.30 but triggers a syntax error under V 5.5.9,
at the first '|' char.

I've been thru all the changelogs between those 2 versions and I
did not see anything which alerted me this type of issue.

I have a giant array declaration, over 400 lines long, indexed by
$controller_name and then by $action_name, to help validate each
form for each controller. My solution for V 5.5.9 was to shift the
declaration into the function it's used within. Now the code run
under both versions.

Anyone see anything similar?

BTW: Statements of how appalling PHP's design is are all redundant, I assure you.

Leave a comment

About Ron Savage

user-pic I try to write all code in Perl, but find I end up writing in bash, CSS, HTML, JS, and SQL, and doing database design, just to get anything done...