Monday 1 January 2018

php - Can't use method return value in write context

itemprop="text">

I would think the following piece of
code should work, but it doesn't (Edited: Now works in PHP
5.5+)
:



if
(!empty($r->getError()))



Where
getError() is
simply:



public function
getError()
{
return
$this->error;
}


Yet
I end up with this
error:






can't use method return value in write
context




What does
this mean? Isn't this just a read?


class="post-text" itemprop="text">
class="normal">Answer




empty() needs to
access the value by reference (in order to check whether that reference points to
something that exists), and PHP before 5.5 didn't support references to temporary values
returned from functions.



However, the real
problem you have is that you use empty() at all, mistakenly
believing that "empty" value is any different from
"false".




Empty is just an alias for
!isset($thing) || !$thing. When the thing you're checking
always exists (in PHP results of function calls always exist), the
empty() function is nothing but a negation
operator
.



PHP doesn't
have concept of emptyness
. Values that evaluate to false are empty,
values that evaluate to true are non-empty. It's the same thing. This
code:



$x =
something();
if (empty($x))



and
this:




$x =
something();
if (!$x)



has
always the same result, in all cases, for all datatypes
(because $x is defined empty() is
redundant).



Return value from the method always
exists (even if you don't have return statement, return value
exists and contains null).
Therefore:



if
(!empty($r->getError()))



is
logically equivalent to:



if
($r->getError())


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...