Php 从基类调用继承的方法
我有一个具有重写方法doSomething()的扩展类。 由于某些原因,继承类的方法永远不会只运行基类Php 从基类调用继承的方法,php,inheritance,Php,Inheritance,我有一个具有重写方法doSomething()的扩展类。 由于某些原因,继承类的方法永远不会只运行基类 class cDemoClass { public static function getInstance() { static $instance = null; if ($instance === null) $instance = new cDemoClass(); return $instance; } private funct
class cDemoClass {
public static function getInstance() {
static $instance = null;
if ($instance === null)
$instance = new cDemoClass();
return $instance;
}
private function __construct() {
}
protected function doSomething() {
echo 'do something';
}
public function call_me() {
$this->doSomething();
}
}
class cDemoClassEx extends cDemoClass {
protected function doSomething() {
echo 'do something differently';
}
}
$baseclass = cDemoClass::getInstance();
$baseclass->call_me();
echo '<br/>';
$extendedclass = cDemoClassEx::getInstance();
$extendedclass->call_me();
class类cdemo类{
公共静态函数getInstance(){
静态$instance=null;
如果($instance==null)
$instance=new cDemoClass();
返回$instance;
}
私有函数_u构造(){
}
受保护函数doSomething(){
回声“做点什么”;
}
公共函数调用{
$this->doSomething();
}
}
类cDemoClassEx扩展了cDemoClass{
受保护函数doSomething(){
echo“做一些不同的事情”;
}
}
$baseclass=cDemoClass::getInstance();
$baseclass->call_me();
回声“
”;
$extendedclass=cDemoClassEx::getInstance();
$extendedclass->call_me();
结果:
做点什么
做点什么
第二个应该是“做一些不同的事情”,至少这是我所期望的。
谁能告诉我我做错了什么?谢谢您必须使用cDemoClassEx::getInstance()覆盖并更改此行
$instance = new cDemoClass();
进入
您还需要将
cDemoClass::\u construct()
声明为protected
,或者只需在cDemoClassEx
中重写它,因为cDemoClassEx::getInstance()代码>仍在返回新的cDemoClass()代码>。您还必须覆盖getInstance()
方法:
class cDemoClass {
public static function getInstance() {
static $instance = null;
if ($instance === null)
$instance = new cDemoClass();
return $instance;
}
private function __construct() {
}
protected function doSomething() {
echo 'do something';
}
public function call_me() {
$this->doSomething();
}
}
class cDemoClassEx extends cDemoClass {
public static function getInstance() {
static $instance = null;
if ($instance === null)
$instance = new cDemoClassEx();
return $instance;
}
private function __construct() {
}
protected function doSomething() {
echo 'do something differently';
}
}
$baseclass = cDemoClass::getInstance();
$baseclass->call_me();
echo '<br/>';
$extendedclass = cDemoClassEx::getInstance();
$extendedclass->call_me();
class类cdemo类{
公共静态函数getInstance(){
静态$instance=null;
如果($instance==null)
$instance=new cDemoClass();
返回$instance;
}
私有函数_u构造(){
}
受保护函数doSomething(){
回声“做点什么”;
}
公共函数调用{
$this->doSomething();
}
}
类cDemoClassEx扩展了cDemoClass{
公共静态函数getInstance(){
静态$instance=null;
如果($instance==null)
$instance=new cDemoClassEx();
返回$instance;
}
私有函数_u构造(){
}
受保护函数doSomething(){
echo“做一些不同的事情”;
}
}
$baseclass=cDemoClass::getInstance();
$baseclass->call_me();
回声“
”;
$extendedclass=cDemoClassEx::getInstance();
$extendedclass->call_me();
在这种情况下,您需要使用后期静态绑定
(5.3+)。父方法的更改getInstance
行:
$instance = new cDemoClass();
到
您将获得:
do something
do something differently
请在此处阅读有关此功能的更多信息:
$instance = new static();
do something
do something differently