Edit report at http://bugs.php.net/bug.php?id=53616&edit=1
ID: 53616
Comment by: damian at damianzaremba dot co dot uk
Reported by: hey at lukecarrier dot me
Summary: T_LOGICAL_AND when declaring and() method in class
Status: Bogus
Type: Bug
Package: Scripting Engine problem
Operating System: Windows 7 x64
PHP Version: 5.3.4
Block user comment: N
Private report: N
New Comment:
That link explains the exception however I do not think that it should
be thrown in this case. It is clear that a function is being defined
rather than a logical comparison being performed.
In this context I believe it should have the result as expected above
and only apply logical comparisons in valid circumstances such as in an
if.
When defining this function, especially in a class it makes no sense to
restrict it based in builtins or logical operators. For example defining
function and() { echo "hi"; } would not affect if($bar === "foo" and
$foo === "bar"){} in any way.
Previous Comments:
------------------------------------------------------------------------
[2010-12-27 16:28:48] [email protected]
This is expected.
http://docs.php.net/manual/en/tokens.php
------------------------------------------------------------------------
[2010-12-27 16:26:45] hey at lukecarrier dot me
Description:
------------
When declaring a method named 'and' within a class, PHP throws a parse
error
because the function name is interpreted as a logical operator
(T_LOGICAL_AND).
This appears to be a bug, as it's clear in this context that the
developer is not
attempting to perform a comparison.
Test script:
---------------
<?php
class LogicalOperatorTest {
public function and() {
echo "successful!";
}
}
?>
Expected result:
----------------
The method LogicalOperatorTest->and() to be declared.
Actual result:
--------------
Parse error: syntax error, unexpected T_LOGICAL_AND, expecting T_STRING
in
C:\pathto\lovely.php on line 5
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=53616&edit=1