From: mo at modejong dot com
Operating system: WinXP
PHP version: 5.2.5
PHP Bug Type: Class/Object related
Bug description: Invalid invocation of non-static class function
Description:
------------
PHP allows invocation of an instance method in a class that
is unrelated to the current class. I would think that the
correct thing to do in this case is to generate an error
at runtime when this specific case is detected.
Reproduce code:
---------------
class One {
function foo() {
$isnull = ($this == NULL) ? "TRUE" : "FALSE";
$instanceof = ($this instanceof One) ? "TRUE" : "FALSE";
print "One::foo is \$this null ($isnull) : is instanceof One
($instanceof)\n";
}
}
class Two {
function foo() {
$isnull = ($this == NULL) ? "TRUE" : "FALSE";
$instanceof = ($this instanceof Two) ? "TRUE" : "FALSE";
print "Two::foo is \$this null ($isnull) : is instanceof Two
($instanceof)\n";
return One::foo();
}
}
$obj = new Two;
$obj->foo();
Expected result:
----------------
When executed, PHP prints:
Two::foo is $this null (FALSE) : is instanceof Two (TRUE)
One::foo is $this null (FALSE) : is instanceof One (FALSE)
It should generate an error here since Two is unrelated
to class One. This check should be done when invoking
the instance method, if the $this ref is not NULL then
the type of $this should be checked before the instance
method can be invoked in One.
I already read bug 42559, it seems to have been rejected
as "not a bug", but this issue is clearly a bug. Use of
a method call like CLASS::METHOD inside a class def does
not mean the method being invoked is static.
--
Edit bug report at http://bugs.php.net/?id=43914&edit=1
--
Try a CVS snapshot (PHP 4.4):
http://bugs.php.net/fix.php?id=43914&r=trysnapshot44
Try a CVS snapshot (PHP 5.2):
http://bugs.php.net/fix.php?id=43914&r=trysnapshot52
Try a CVS snapshot (PHP 5.3):
http://bugs.php.net/fix.php?id=43914&r=trysnapshot53
Try a CVS snapshot (PHP 6.0):
http://bugs.php.net/fix.php?id=43914&r=trysnapshot60
Fixed in CVS: http://bugs.php.net/fix.php?id=43914&r=fixedcvs
Fixed in release:
http://bugs.php.net/fix.php?id=43914&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=43914&r=needtrace
Need Reproduce Script: http://bugs.php.net/fix.php?id=43914&r=needscript
Try newer version: http://bugs.php.net/fix.php?id=43914&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=43914&r=support
Expected behavior: http://bugs.php.net/fix.php?id=43914&r=notwrong
Not enough info:
http://bugs.php.net/fix.php?id=43914&r=notenoughinfo
Submitted twice:
http://bugs.php.net/fix.php?id=43914&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=43914&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=43914&r=php3
Daylight Savings: http://bugs.php.net/fix.php?id=43914&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=43914&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=43914&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=43914&r=float
No Zend Extensions: http://bugs.php.net/fix.php?id=43914&r=nozend
MySQL Configuration Error: http://bugs.php.net/fix.php?id=43914&r=mysqlcfg