Req #40840 [Opn->Wfx]: Derived class cant call its private method from the context of its base class
Edit report at https://bugs.php.net/bug.php?id=40840&edit=1
ID: 40840
Updated by: nikic@php.net
Reported by: davcha at nordnet dot fr
Summary: Derived class cant call its private method from the
context of its base class
-Status: Open
+Status: Wont fix
Type: Feature/Change Request
-Package: Feature/Change Request
+Package: *General Issues
Operating System: Windows XP SP2
PHP Version: 5.2.1
Block user comment: N
Private report: N
New Comment:
The whole point of "private" is that access is only possible from within the class that
declares the method (the usual loopholes using reflection and closure rebinding notwithstanding).
This is definitely not going to change.
Also [citation needed] on your claim that other languages allow what you suggest, because I'm
pretty sure they don't.
Previous Comments:
------------------------------------------------------------------------
[2007-03-17 00:22:47] davcha at nordnet dot fr
How about this :
<?php
class BaseClass {
protected function A($f){
var_dump($this);
$this->$f();
}
}
class SubClass extends BaseClass {
private function B(){
echo 'hello, i dont show !';
}
public function C(){
$this->A('B');
}
}
$b = new SubClass();
$b->C('B');
?>
In this case, i'm calling SubClass:B() from SubClass context. At least, that's how it
should work : that's how it works in C, C#, etc...
In PHP 5.2.1 i'm still getting the same fatal error.
------------------------------------------------------------------------
[2007-03-16 23:58:53] johannes@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
You are calling a method from SubClass out of the BaseClass context.
------------------------------------------------------------------------
[2007-03-16 23:25:32] davcha at nordnet dot fr
Description:
------------
A derived class 'SubClass' cannot call a private method declared into 'SubClass'
from the context of its parent class 'BaseClass'.
However, even if the private method is called from 'BaseClass', dumping the variable $this
shows the current class type is 'SubClass'.
Reproduce code:
---------------
<?php
class BaseClass {
public function A($f){
var_dump($this);
$this->$f();
}
}
class SubClass extends BaseClass {
private function B(){
echo 'hello, i dont show !';
}
}
$b = new SubClass();
$b->A('B');
?>
Expected result:
----------------
object(SubClass)#1 (0) { } hello, i dont show !
Actual result:
--------------
object(SubClass)#1 (0) { }
Fatal error: Call to private method SubClass::B() from context 'BaseClass' in
C:\httpd\htdocs\pwidgets\test2.php on line 5
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=40840&edit=1
Thread (4 messages)