#38350 [Opn->Bgs]: regexpr string causes error at runtime.
| From: | tony2001@php.net | Date: | Sat, 05 Aug 2006 18:27:12 +0000 |
| Subject: | #38350 [Opn->Bgs]: regexpr string causes error at runtime. | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-100405@lists.php.net to get a copy of this message | ||
ID: 38350
Updated by: tony2001@php.net
Reported By: syacko at nayaco dot com
-Status: Open
+Status: Bogus
Bug Type: Scripting Engine problem
Operating System: RHEL 4 update 3 Linux
PHP Version: 5.1.4
New Comment:
Because variables/expressions are not allowed when initializing class
attributes.
Previous Comments:
------------------------------------------------------------------------
[2006-08-05 18:25:08] syacko at nayaco dot com
Ok, fair enough on the quoting. The question is why does the second
example work. The bug is that there is different behavior for the same
action. Either way the parsing engine should see the $ and generate an
error.
------------------------------------------------------------------------
[2006-08-05 18:19:18] tony2001@php.net
private $myFilter = "/^NC([a-zA-Z]+)\.php$/";
"$" in strings means start of the variable.
You have to quote it to make the engine to ignore it:
private $myFilter = "/^NC([a-zA-Z]+)\.php\$/";
------------------------------------------------------------------------
[2006-08-05 18:09:14] syacko at nayaco dot com
Description:
------------
In a class, using a private variable with a regular expression will
cause a parseing error. The same regular expression in a method
variable will not.
Error Message:
Parse error: syntax error, unexpected '"' in
/nayaco/apps/releasemanager/test.php on line 8
Reproduce code:
---------------
Code that does not work:
<?php
$x = new regClass();
$x->main();
$x = null;
exit;
class regClass
{
private $myFilter = "/^NC([a-zA-Z]+)\.php$/";
public function main()
{
echo $this->myFilter."\n";
echo preg_match($this->myFilter, "NCScott.php", $myMatches);
print_r($myMatches);
}
}
?>
Code that works:
<?php
$x = new regClass();
$x->main();
$x = null;
exit;
class regClass
{
public function main()
{
$myFilter = "/^NC([a-zA-Z]+)\.php$/";
echo $myFilter."\n";
echo preg_match($myFilter, "NCScott.php", $myMatches);
print_r($myMatches);
}
}
?>
Expected result:
----------------
Both sets of code should produce the same result:
/^NC([a-zA-Z]+)\.php$/
1Array
(
[0] => NCScott.php
[1] => Scott
)
Actual result:
--------------
Parse error: syntax error, unexpected '"' in
/nayaco/apps/releasemanager/test.php on line 8
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=38350&edit=1