0

I have a small issue with my script.

I'm getting Strict Standards: Only variables should be passed by reference in

if( $checkDNS && ($domain = end(explode('@',$email, 2))) )
Neo Castelli
  • 91
  • 1
  • 1
  • 6
  • possible duplicate of [Strict Standards: Only variables should be passed by reference](http://stackoverflow.com/questions/2354609/strict-standards-only-variables-should-be-passed-by-reference) – Lorenz Meyer Jun 21 '14 at 08:32

3 Answers3

3

From the PHP manual:

This array is passed by reference because it is modified by the function. This means you must pass it a real variable and not a function returning an array because only actual variables may be passed by reference.

So you must use a variable in the end function:

$domain = explode('@',$email, 2);
if( $checkDNS && ($domain = end($domain)) )
rink.attendant.6
  • 44,500
  • 61
  • 101
  • 156
2

From the manual:

mixed end ( array &$array )

end takes the array by reference and move the internal pointer. Your array is the function output, so its unable to correctly modify the array by reference.

datasage
  • 19,153
  • 2
  • 48
  • 54
0

Like the message says, end expects a variable because its parameter is a reference.

But since PHP 5.4 you can dereference arrays like that:

$domain = explode('@',$email, 2)[1];

Assuming that $email always contains @. You should assure that beforehand, otherwise end(...) would give you unexpected results too.

Fabian Schmengler
  • 24,155
  • 9
  • 79
  • 111