#33455 [Bgs->Opn]: is_callable will not handle private/public well from within a class
| From: | php at adaniels dot nl | Date: | Fri, 24 Jun 2005 07:26:40 +0000 |
| Subject: | #33455 [Bgs->Opn]: is_callable will not handle private/public well from within a class | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-80947@lists.php.net to get a copy of this message | ||
ID: 33455
User updated by: php at adaniels dot nl
Reported By: php at adaniels dot nl
-Status: Bogus
+Status: Open
Bug Type: *General Issues
Operating System: NB
PHP Version: 5.0.3
New Comment:
Please comment....
Previous Comments:
------------------------------------------------------------------------
[2005-06-24 01:48:38] php at adaniels dot nl
Are you sure? I did not see this bug in the bug reports.
Please do not confuse this bug with Bug #29210 'Function: is_callable
- no support for private and protected classes':
http://bugs.php.net/bug.php?id=29210
Function is_callable does work correctly for private methode's from
outside the object, as is done in bug 29210. But is doest not work
correctly when using $this within the class as is done in this report.
PS. I use ZendStudio for development. The latest version of ZendStudio
is bundeled with PHP 5.0.3. That's why I did not test this under 5.0.4
------------------------------------------------------------------------
[2005-06-23 23:08:11] tony2001@php.net
*ALWAYS* try latest snapshots before reporting a bug.
This was fixed long time ago.
Btw, 5.0.3 is not even the latest version.
------------------------------------------------------------------------
[2005-06-23 22:28:05] php at adaniels dot nl
Description:
------------
Function is_callable will not handle private/public well from within a
class.
Reproduce code:
---------------
<?php
class X {
private function getXX($value) {
return "XX $value";
}
function testXX() {
echo (is_callable(array($this, 'getXX')) ? $this->getXX("test") :
"Can't call getXX within " . __CLASS__) . "\n";
}
}
class Y extends X {
function testXX() {
echo (is_callable(array($this, 'getXX')) ? $this->getXX("test") :
"Can't call getXX within " . __CLASS__) . "\n";
}
}
$x = new X;
echo (is_callable($x, 'getXX') ? $x->getXX("test") : "Can't call
getXX
outside for " . get_class($x)) . "\n";
$x->testXX();
$y = new y;
echo (is_callable($y, 'getXX') ? $y->getXX("test") : "Can't call
getXX
outside for " . get_class($y)) . "\n";
$y->testXX();
?>
Expected result:
----------------
Can't call getXX outside for X
XX test
Can't call getXX outside for Y
Can't call getXX within Y
Actual result:
--------------
Can't call getXX outside for X
XX test
Can't call getXX outside for Y
<br />
<b>Fatal error</b>: Call to private method X::getXX() from context 'Y'
in <b>\\Seabert\webroot\ontwikkeling\quickbuild\test.php</b> on line
<b>76</b><br />
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=33455&edit=1