Re: [PHP] Newbie Question about Conditionals

2010-03-31 Thread Matty Sarro
After looking up the === operator, I see exactly what you mean. Thanks for
your help everyone. I think the confusion was that I was always under the
impression that assignment is either true or false; I would never have
guessed it was equal to the value assigned. Your examples really helped to
solidify the concept though!

PS: I have to say that PHP has the *best* documentation I've ever seen
beside Java.

Thanks again!

On Wed, Mar 31, 2010 at 4:43 AM, Richard Quadling
wrote:

> On 31 March 2010 05:45, Matty Sarro  wrote:
> > That explains it perfectly, thanks you!
> >
> > On Wed, Mar 31, 2010 at 12:40 AM, Tommy Pham  wrote:
> >
> >> On Tue, Mar 30, 2010 at 9:22 PM, Matty Sarro  wrote:
> >> > Hey all!
> >> > This is probably my second post on the list, so please be gentle.
> Right
> >> now
> >> > I am running through the "Heads First PHP and MySQL" book from
> O'Reilly.
> >> > It's been quite enjoyable so far, but I have some questions about some
> of
> >> > the code they're using in one of the chapters.
> >> >
> >> > Basically the code is retreiving rows from a DB, and I'm just not
> getting
> >> > the explanation of how it works.
> >> >
> >> > Here's the code:
> >> >
> >> > $result=mysqli_query($dbc,$query)
> >> >
> >> > while($row=mysqli_fetch_array($result)){
> >> > echo $row['first_name'].' '.$row['last_name'].' : '. $row['email'] .
> ' >> > />';
> >> > }
> >> >
> >> > Now, I know what it does, but I don't understand how the conditional
> >> > statement in the while loop works. Isn't an assignment operation
> always
> >> > going to result in a "true" condition? Even if
> >> mysqli_fetch_array($result)
> >> > returned empty values (or null) wouldn't the actual assignment to $row
> >> still
> >> > be considered a true statement? I would have sworn that assignment
> >> > operations ALWAYS equated to true if used in conditional operations.
> >> > Please help explain! :)
> >> >
> >> > Thanks so much!
> >> > -Matty
> >> >
> >>
> >> http://www.php.net/manual/en/function.mysql-fetch-array.php
> >>
> >> "Returns an array of strings that corresponds to the fetched row, or
> >> FALSE  if there are no more rows."
> >>
> >> while($row=mysqli_fetch_array($result)) is equivalent to this:
> >>
> >> $row=mysqli_fetch_array($result);
> >> while ($row){
> >>
> >> // do something
> >>
> >> $row=mysqli_fetch_array($result);
> >> }
> >>
> >> So, if $row is not equal to FALSE, the loop will happens.
> >>
> >
>
> Another part to the answer is the value of the assignment. From the
> documentation (
> http://docs.php.net/manual/en/language.operators.assignment.php),
> ...
>
> "The value of an assignment expression is the value assigned."
>
> while($row = mysqli_fetch_array($result))
>
>
> But there is a significant issue here. Whilst not attributable to the
> mysqli_fetch_array() function, it is certainly possible to give
> yourself a significant WTF moment with it.
>
>
> May be will be easier to see the problem when the code is written as ...
>
> while(False === ($row = mysqli_fetch_array($result)))
>
> No?
>
>
> If I say ...
>
> 0 == False
>
> does that help?
>
>
>
> Without running the 2 stupid scripts  below, what output should you get?
>
> 
>
> and
>
> 
>
> Clearly, they should be different, yes?
>
> Unfortunately, they won't be.
>
> The first call returns 0 and the second returns False.
>
> And as 0 == False, the while() does not loop.
>
> But ...
>
> 
>
> and
>
> 
>
> now operate correctly. The first one runs forever, printing a's and
> the second one quits straight away.
>
> By always using ...
>
> while(False !== ($var = function($param)))
>
> you can clearly differentiate between functions that return false to
> indicate failure and 0 to indicate a position or actual value.
>
> Regards,
>
> Richard.
>
>
>
>
>
> --
> -
> Richard Quadling
> "Standing on the shoulders of some very clever giants!"
> EE : http://www.experts-exchange.com/M_248814.html
> EE4Free : http://www.experts-exchange.com/becomeAnExpert.jsp
> Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
> ZOPA : http://uk.zopa.com/member/RQuadling
>


Re: [PHP] Newbie Question about Conditionals

2010-03-31 Thread Richard Quadling
On 31 March 2010 05:45, Matty Sarro  wrote:
> That explains it perfectly, thanks you!
>
> On Wed, Mar 31, 2010 at 12:40 AM, Tommy Pham  wrote:
>
>> On Tue, Mar 30, 2010 at 9:22 PM, Matty Sarro  wrote:
>> > Hey all!
>> > This is probably my second post on the list, so please be gentle. Right
>> now
>> > I am running through the "Heads First PHP and MySQL" book from O'Reilly.
>> > It's been quite enjoyable so far, but I have some questions about some of
>> > the code they're using in one of the chapters.
>> >
>> > Basically the code is retreiving rows from a DB, and I'm just not getting
>> > the explanation of how it works.
>> >
>> > Here's the code:
>> >
>> > $result=mysqli_query($dbc,$query)
>> >
>> > while($row=mysqli_fetch_array($result)){
>> > echo $row['first_name'].' '.$row['last_name'].' : '. $row['email'] . '> > />';
>> > }
>> >
>> > Now, I know what it does, but I don't understand how the conditional
>> > statement in the while loop works. Isn't an assignment operation always
>> > going to result in a "true" condition? Even if
>> mysqli_fetch_array($result)
>> > returned empty values (or null) wouldn't the actual assignment to $row
>> still
>> > be considered a true statement? I would have sworn that assignment
>> > operations ALWAYS equated to true if used in conditional operations.
>> > Please help explain! :)
>> >
>> > Thanks so much!
>> > -Matty
>> >
>>
>> http://www.php.net/manual/en/function.mysql-fetch-array.php
>>
>> "Returns an array of strings that corresponds to the fetched row, or
>> FALSE  if there are no more rows."
>>
>> while($row=mysqli_fetch_array($result)) is equivalent to this:
>>
>> $row=mysqli_fetch_array($result);
>> while ($row){
>>
>> // do something
>>
>> $row=mysqli_fetch_array($result);
>> }
>>
>> So, if $row is not equal to FALSE, the loop will happens.
>>
>

Another part to the answer is the value of the assignment. From the
documentation (http://docs.php.net/manual/en/language.operators.assignment.php),
...

"The value of an assignment expression is the value assigned."

while($row = mysqli_fetch_array($result))


But there is a significant issue here. Whilst not attributable to the
mysqli_fetch_array() function, it is certainly possible to give
yourself a significant WTF moment with it.


May be will be easier to see the problem when the code is written as ...

while(False === ($row = mysqli_fetch_array($result)))

No?


If I say ...

0 == False

does that help?



Without running the 2 stupid scripts  below, what output should you get?



and



Clearly, they should be different, yes?

Unfortunately, they won't be.

The first call returns 0 and the second returns False.

And as 0 == False, the while() does not loop.

But ...



and



now operate correctly. The first one runs forever, printing a's and
the second one quits straight away.

By always using ...

while(False !== ($var = function($param)))

you can clearly differentiate between functions that return false to
indicate failure and 0 to indicate a position or actual value.

Regards,

Richard.





-- 
-
Richard Quadling
"Standing on the shoulders of some very clever giants!"
EE : http://www.experts-exchange.com/M_248814.html
EE4Free : http://www.experts-exchange.com/becomeAnExpert.jsp
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
ZOPA : http://uk.zopa.com/member/RQuadling

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Newbie Question about Conditionals

2010-03-30 Thread Matty Sarro
That explains it perfectly, thanks you!

On Wed, Mar 31, 2010 at 12:40 AM, Tommy Pham  wrote:

> On Tue, Mar 30, 2010 at 9:22 PM, Matty Sarro  wrote:
> > Hey all!
> > This is probably my second post on the list, so please be gentle. Right
> now
> > I am running through the "Heads First PHP and MySQL" book from O'Reilly.
> > It's been quite enjoyable so far, but I have some questions about some of
> > the code they're using in one of the chapters.
> >
> > Basically the code is retreiving rows from a DB, and I'm just not getting
> > the explanation of how it works.
> >
> > Here's the code:
> >
> > $result=mysqli_query($dbc,$query)
> >
> > while($row=mysqli_fetch_array($result)){
> > echo $row['first_name'].' '.$row['last_name'].' : '. $row['email'] . ' > />';
> > }
> >
> > Now, I know what it does, but I don't understand how the conditional
> > statement in the while loop works. Isn't an assignment operation always
> > going to result in a "true" condition? Even if
> mysqli_fetch_array($result)
> > returned empty values (or null) wouldn't the actual assignment to $row
> still
> > be considered a true statement? I would have sworn that assignment
> > operations ALWAYS equated to true if used in conditional operations.
> > Please help explain! :)
> >
> > Thanks so much!
> > -Matty
> >
>
> http://www.php.net/manual/en/function.mysql-fetch-array.php
>
> "Returns an array of strings that corresponds to the fetched row, or
> FALSE  if there are no more rows."
>
> while($row=mysqli_fetch_array($result)) is equivalent to this:
>
> $row=mysqli_fetch_array($result);
> while ($row){
>
> // do something
>
> $row=mysqli_fetch_array($result);
> }
>
> So, if $row is not equal to FALSE, the loop will happens.
>


Re: [PHP] Newbie Question about Conditionals

2010-03-30 Thread Tommy Pham
On Tue, Mar 30, 2010 at 9:22 PM, Matty Sarro  wrote:
> Hey all!
> This is probably my second post on the list, so please be gentle. Right now
> I am running through the "Heads First PHP and MySQL" book from O'Reilly.
> It's been quite enjoyable so far, but I have some questions about some of
> the code they're using in one of the chapters.
>
> Basically the code is retreiving rows from a DB, and I'm just not getting
> the explanation of how it works.
>
> Here's the code:
>
> $result=mysqli_query($dbc,$query)
>
> while($row=mysqli_fetch_array($result)){
> echo $row['first_name'].' '.$row['last_name'].' : '. $row['email'] . ' />';
> }
>
> Now, I know what it does, but I don't understand how the conditional
> statement in the while loop works. Isn't an assignment operation always
> going to result in a "true" condition? Even if mysqli_fetch_array($result)
> returned empty values (or null) wouldn't the actual assignment to $row still
> be considered a true statement? I would have sworn that assignment
> operations ALWAYS equated to true if used in conditional operations.
> Please help explain! :)
>
> Thanks so much!
> -Matty
>

http://www.php.net/manual/en/function.mysql-fetch-array.php

"Returns an array of strings that corresponds to the fetched row, or
FALSE  if there are no more rows."

while($row=mysqli_fetch_array($result)) is equivalent to this:

$row=mysqli_fetch_array($result);
while ($row){

// do something

$row=mysqli_fetch_array($result);
}

So, if $row is not equal to FALSE, the loop will happens.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php