ID: 49061
Updated by: [email protected]
Reported By: majuki at yahoo dot com
Status: Bogus
Bug Type: *General Issues
Operating System: CenTOS
PHP Version: 5.2.10
New Comment:
There is still no bug here.
Essentially you are saying that:
if(empty($var)) echo $var;
should not generate a warning if $var is undefined. Whether you write
it like that, or like:
echo (empty($var)) ? 'value="' . $var. '"' : '';
is irrelevant. You have $var in the true part of the ternary there
meaning that if $var is empty, which it will be if it is not defined,
then try to echo it out. That will give you that warning, as it should.
You have still not shown us a script that gives an unexpected warning
in the ternary operator.
Previous Comments:
------------------------------------------------------------------------
[2009-07-27 01:55:27] majuki at yahoo dot com
wow - harsh. Guess you're having a bad day.
The code provided, while not my original, does represent the exact
syntax that is used and executes as expected. Yes, there's a syntax
error, I put the ; in the wrong place when typing it in. I'm sorry for
not making it so you can cut and paste, it was a typo.
As to my original it is far more complex than this simple extraction
and difficult to "sum up" in 10-20 lines. I will attempt to extrapolate
the core logic for you and provide cut and paste code.
File1:
<?php
$var = 1;
include(file2.php);
?>
File2:
<div <?php if (empty($var)) echo 'value="' . $var . '"'; ?>></div>
<div <?php echo (empty($var)) ? '' : 'value="' . $var. '"'; ?>></div>
The above generate the notice where as the following do not:
<div <?php if (empty($var)) { echo $var; } ?>></div>
<div <?php echo (empty($var)) ? 'value="' . $var. '"' : ''; ?>></div>
I hope this is sufficient.
Please understand that this is my time too - I'm volunteering my time
to report what I've observed to be strange and unexpected behaviour, not
because it's a problem I need fixed. All I had to do was turn off
E_NOTICE and forget about it, but I thought it might warrant looking
into. So please, next time when someone is reporting something,
remember that they didn't have to take the time and if they don't have
the time (or in some cases the skill) to provide you with perfect code,
be a little understanding.
I hope tomorrow is a better day for you. Sincerely.)
------------------------------------------------------------------------
[2009-07-26 21:29:45] [email protected]
Once again your script doesn't run. There is a syntax error.
Plus, of course you get a warning with:
if (!isset($var)) echo $var;
The warning is on the echo of a variable that hasn't been set, not on
the check itself. Until you provide an actual sensible script that you
have run before submitting it, please don't waste any more of our time.
------------------------------------------------------------------------
[2009-07-26 19:39:14] majuki at yahoo dot com
You're right, my mistake - my original script had it more like the
following:
<?php
function doX(){ return 'ok' };
if (!isset($var)) echo $var;
if (empty($var)) echo $var;
echo (!isset($var)) ? doX() : $var;
echo (empty($var)) ? doX() : $var;
?>
Both generated the Notice)
------------------------------------------------------------------------
[2009-07-26 19:09:49] [email protected]
That is a completely bogus test script. Did you even bother to try
running it? You can't have an echo there and you are claiming an
undefined index warning in a script that doesn't even have an index.
------------------------------------------------------------------------
[2009-07-26 18:58:03] majuki at yahoo dot com
Already included it... but I'll expand on it...
<?php
function doX(){};
(!isset($var)) ? doX() : echo $var;
(empty($var)) ? doX() : echo $var;
?>
Above code with E_NOTICE enabled.)
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/49061
--
Edit this bug report at http://bugs.php.net/?id=49061&edit=1