如何从父静态函数调用子函数?
在php5.3中有一个内置的方法叫做get_called_class()
从父类调用子方法。但是我的服务器正在运行php 5.1。
有什么办法可以做到吗?
我想从静态函数调用它。所以我不能使用$this
所以我应该使用"self"关键字。
下面的例子我的父类是"Test123",从父类静态函数"myfunc"我试图调用这样的子类函数"self::test();"
abstract class Test123
{
function __construct()
{
// some code here
}
public static function myfunc()
{
self::test();
}
abstract function test();
}
class Test123456 extends Test123
{
function __construct()
{
parent::__construct();
}
function test()
{
echo "So you managed to call me !!";
}
}
$fish = new Test123456();
$fish->test();
$fish->myfunc();
Edit:您尝试实现的是不可能的PHP 5.1。PHP 5.1中没有后期静态绑定PHP Manual,您需要显式地命名子类来调用子函数:Test123456::test()
, self
将在Test123
类的静态函数中(总是)成为Test123
,并且static
关键字在PHP 5.1中不可用于调用静态函数。
相关:new self vs new static;PHP 5.2等效于延迟静态绑定(新静态)?
如果你引用的是一个静态父函数,那么你需要在php 5.1中为函数调用显式地命名父(或子)函数:
parentClass::func();
Test123456::test();
在PHP 5.3中,您可以使用static
关键字PHP Manual来解析所调用的类名:
static::func();
static::test();
如果这些是非静态的,只需使用$this
PHP Manual:
$this->parentFunc();
$this->childFunc();
或者如果有相同的名称,使用parent
PHP Manual:
parent::parentFunc();
(这不是你想要的,只是为了完整起见放在这里)。
Get_called_class()是为非常特殊的情况引入的,比如延迟静态绑定PHP Manual。
参见对象继承PHP手册
我怀疑你对父/子,类/对象和函数/方法有点困惑。
ionupi G. Stan提供了如何调用未在父类中声明的方法(如他所说,父类应该是抽象的或实现__call()方法)的解释。
然而,如果你的意思是如何调用一个在父类的子类中被重写的方法,那么这是不可能的-也不应该是这样。考虑:
Class shape {
...
}
Class circle extends shape {
function area() {
}
}
Class square extends shape {
function area() {
}
}
如果你打算在'shape'的实例上调用area方法(它没有area方法),那么它应该使用哪个子方法?
try this:
<?php
class A {
public static function newInstance() {
$rv = new static();
return $rv;
}
public function __construct() { echo " A::__construct'n"; }
}
class B extends A {
public function __construct() { echo " B::__construct'n"; }
}
class C extends B {
public function __construct() { echo " C::__construct'n"; }
}
?>