变量分配和检查

Can Someone tell me what's wrong with this code

function someFunction($num=null) {
  return $num;
}
if ($name = someFunction('mystr') && $name ) {
 echo 'hello ';
}else {
  echo 'hi';
}

Why it is going in else condition and giving me notice of undefined variable $name

Edited: - if i do like this

if($name = someFunction() && $name ){
   echo 'hello';
} else {
   echo 'hi';
}

this time its also going on else condition as it should but it also not showing the error as i understand it, php just check my first condition $name = someFunction() and its fail then just else

but if i do as i do previously $name = someFunction('str') now $name is set so why notice of undefined variable

sorry for bad grammer

just want to know what is happening here.

It's because logical operators like && have higher precedence than the assignment operator =. You can read more about this here: http://php.net/manual/en/language.operators.precedence.php

The line

if ($name = someFunction('mystr') && $name ) {

is being evaluated like this:

if ($name = (someFunction('mystr') && $name) ) {

where the expression in the inner brackets is evaluated first. Because $name has not been defined before this point, a notice is raised.

I think what you're trying to do is this:

if (($name = someFunction('mystr')) && $name ) {

where you assign the value mystr to $name and then also evaluate that it's "truthy". But as pointed out in the comments, this is a bit of a strange approach. The following code would be equivalent:

$name = 'mystr';

if ($name) {
  ...

This feels a bit like a problem that's been cut down a bit too much in order to explain it, because it's not really clear why you're doing this.

You haven't assigned anything to your variable $name and since it is an AND Condition, the first gets true but the second one doesn't so assign any value to your $name and add a condition for it to work.

you code output : hi becuase there is $name is in second is always null.

function someFunction($num=null) {
  return $num;
}
$name = someFunction('mystr');
if ($name && $name ) {
 echo 'hello ';
}else {
echo 'hi';
  }

output : mystr && mystr = 1 then output is hello