f



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

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
0
8/21/2005 11:48:18 PM
comp.lang.php 32646 articles. 0 followers. Post Follow

4 Replies
940 Views

Similar Articles

[PageSpeed] 20

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()).

0
zeldorblat (774)
8/22/2005 2:38:46 AM
ZeldorBlat wrote:
> 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:

   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.

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

   Yes, that's how I do it now.  A bit of fuss, but works.

> 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);
> }

   Yes, but again, "empty" checks for null, 0, etc.  Which is useful.

> 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()).

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

/Marcin
0
8/22/2005 9:54:42 AM
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);
}

0
zeldorblat (774)
8/22/2005 2:05:08 PM
Hello!

> 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);
> }

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
0
herojoker (22)
8/22/2005 3:43:46 PM
Reply: