Connecting Tech Pros Worldwide Forums | Help | Site Map

'Parse error' problem in "isset" and "empty"

Marcin Dobrucki
Guest
 
Posts: n/a
#1: Aug 22 '05
I've been having some problems with a parse error that I can't figure
out (PHP 4.3.11 on Solaris9). Sample code:

<?php
// getting strange parse errors on this
class A {
var $value;
function A() {
$this->value = 1;
}

function getValue() {
return $this->value;
}
}

$a = new A();
if (!empty($a->getValue())) {
echo "success";
}
else {
echo "failure";
}
?>

The result of this is:

Parse error: parse error, unexpected '(', expecting ')' in
/foo/public_html/parse_errors.php on line 15

I also get the same effect with "isset", however, testing with "is_null"
or "is_int" produces the correct ("success"/"failure") result. Any ideas?

/Marcin

ZeldorBlat
Guest
 
Posts: n/a
#2: Aug 22 '05

re: 'Parse error' problem in "isset" and "empty"


Check out the following:

http://www.php.net/manual/en/function.empty.php

empty() and isset() only work on variables. In your case,
$a->getValue() is the return value of a function -- not a variable.
You could do something like:

$a = new A();
$v = $a->getValue();
if (!empty($v)) {
echo "success";
}
else {
echo "failure";
}

Alternatively, you could define your own isEmpty() function which does
whatever you want. It could be as simple as:

function isEmpty($value) {
return (strlen($value) == 0);
}

Also, as of PHP 5.1 you can overload calls to empty() and isset() on
object properties. Most useful when you also overload the getters and
settings (via __get() and __set()).

Marcin Dobrucki
Guest
 
Posts: n/a
#3: Aug 22 '05

re: 'Parse error' problem in "isset" and "empty"


ZeldorBlat wrote:[color=blue]
> Check out the following:
>
> http://www.php.net/manual/en/function.empty.php
>
> empty() and isset() only work on variables. In your case,
> $a->getValue() is the return value of a function -- not a variable.
> You could do something like:[/color]

Yea, thanks. I noticed this just as I posted the article, and then
promply canceled it, but it seems it didn't get canceled everywhere.
the is_int and is_null work differently, and it threw me off a bit.
[color=blue]
> $a = new A();
> $v = $a->getValue();
> if (!empty($v)) {
> echo "success";
> }
> else {
> echo "failure";
> }[/color]

Yes, that's how I do it now. A bit of fuss, but works.
[color=blue]
> Alternatively, you could define your own isEmpty() function which does
> whatever you want. It could be as simple as:
>
> function isEmpty($value) {
> return (strlen($value) == 0);
> }[/color]

Yes, but again, "empty" checks for null, 0, etc. Which is useful.
[color=blue]
> Also, as of PHP 5.1 you can overload calls to empty() and isset() on
> object properties. Most useful when you also overload the getters and
> settings (via __get() and __set()).[/color]

Will have a lookie, but still working in 4.x level (and it's not
going to change anytime soon). Thanks.

/Marcin
ZeldorBlat
Guest
 
Posts: n/a
#4: Aug 22 '05

re: 'Parse error' problem in "isset" and "empty"


Well, that's the beauty of writing your own isEmpty()...you can have it
do whatever you want. You could simulate PHP's empty() behavior pretty
easily:

function isEmpty($value) {
return (strlen($value) == 0 || is_null($value) || $value == 0);
}

Hero Wanders
Guest
 
Posts: n/a
#5: Aug 22 '05

re: 'Parse error' problem in "isset" and "empty"


Hello!
[color=blue]
> Well, that's the beauty of writing your own isEmpty()...you can have it
> do whatever you want. You could simulate PHP's empty() behavior pretty
> easily:
>
> function isEmpty($value) {
> return (strlen($value) == 0 || is_null($value) || $value == 0);
> }[/color]

If you want to emulate PHP empty()'s behaviour completely (and only
then) you should use

function isEmpty($value) {
return empty($value);
}

I assume this is faster than doing the checks yourself.

Greetings,
Hero
Closed Thread