Doc #73771 [Ver]: Wrong "return values" section
| From: | cmb@php.net | Date: | Sun, 08 Jul 2018 12:53:56 +0000 |
| Subject: | Doc #73771 [Ver]: Wrong "return values" section | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-15856@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=73771&edit=1
ID: 73771
Updated by: cmb@php.net
Reported by: rjhdby@php.net
Summary: Wrong "return values" section
Status: Verified
Type: Documentation Problem
Package: COM related
PHP Version: Irrelevant
-Assigned To: cmb
+Assigned To:
Block user comment: N
Private report: N
New Comment:
It seems to me the COM documentation needs a general overhaul.
There's still a lot of talk about the differences between PHP 4
and 5, which is water under the bridge now. Also, the return type
of variant_eqv() and lots of other variant_*() functions is given
as
mixed, but is most certainly VARIANT.
Previous Comments:
------------------------------------------------------------------------
[2018-04-23 21:24:00] requinix@php.net
> VT_UI8(255) + VT_UI8(2) = VT_I4(2).
Er, that's an AND, not addition.
------------------------------------------------------------------------
[2018-04-23 21:20:10] requinix@php.net
After some testing, VarEqv appears to return the same/similar type of value as it was passed; give
it VT_BOOLs and it returns a VT_BOOL, or give it VT_UI8s and it returns a VT_UI8. I've also
found some anecdotal evidence that VARIANTs have always blurred the line between integer and
boolean.
Presumably this behavior extends to any situation where integers and booleans can be treated the
same way, though with a bit more testing the return type is the same boolean/integer nature but not
necessarily the same VT_* type - for example, VT_UI8(255) + VT_UI8(2) = VT_I4(2).
I'm thinking a warning in the variant_* functions that work with booleans (probably
and,eqv,imp,not,or,xor), and/or a note in the VARIANT class docs that this type looseness happens.
------------------------------------------------------------------------
[2018-04-23 15:39:05] cmb@php.net
> It is bitwise, not logical, operation.
Indeed, so apparently MSDN is wrong, also wrt. VarXor which also
works bitwise.
------------------------------------------------------------------------
[2016-12-17 18:20:29] andrewgrom at rambler dot ru
$a = new VARIANT(255, VT_UI1); // 11111111
$b = new VARIANT(2, VT_UI1); // 00000010
$c = variant_eqv($a, $b);
echo "result is: ".$c;
result is: 2 <--- Does not match description "If each bit in left is equal to the
corresponding bit in right then TRUE is returned, otherwise FALSE is returned."
It is bitwise, not logical, operation.
------------------------------------------------------------------------
[2016-12-17 11:43:49] requinix@php.net
It's equivalence: returning boolean makes sense. And it mirrors the VarEqv documentation.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms221077(v=vs.85).aspx
What's the problem?
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=73771
--
Edit this bug report at https://bugs.php.net/bug.php?id=73771&edit=1