如果到现在我对ststic有点了解现在我意识到我什么都不懂.我很困惑,我很难理解,我不能.有人可以在使用self,parent,static时解释这个程序,以及我所做的所有最小的改变都会改变结果而不会让我无法理解正在发生的事情.非常感谢 ..
来自http://docs.php.net/language.oop5.late-static-bindings的代码
<?php
class A {
public static function foo() {
static::who();
}
public static function who() {
echo __CLASS__."\n";
}
}
class B extends A {
public static function test() {
A::foo();
parent::foo();
self::foo();
}
public static function who() {
echo __CLASS__."\n";
}
}
class C extends B {
public static function who() {
echo __CLASS__."\n";
}
}
C::test();
?>
Run Code Online (Sandbox Code Playgroud)
出局是:
A
C
C
Run Code Online (Sandbox Code Playgroud) class A
{
static $v = "A";
static function echoExtendedStaticVariable() {
echo self::$v;
}
}
class B extends A
{
static $v = "B";
// override A's variable with "B"
}
Run Code Online (Sandbox Code Playgroud)
为什么:
echo B::$v
Run Code Online (Sandbox Code Playgroud)
打印"A"?
我如何让它打印"B"?
在PHP 5.3之前有没有办法做到这一点?
我有两节课:
class JController{
public static function getInstance()
{
//some source, not important...
self::createFile();//
}
public static function createFile()
{
// this is base class method
}
}
class CustomController extends JController{
public static function createFile()
{
// this is overriden class method
}
}
Run Code Online (Sandbox Code Playgroud)
我试图在派生类上调用静态方法,它调用parent方法而不是覆盖.这是预期的行为吗?
这就是我尝试使用它的方式:
$controllerInstance = CustomController::getInstance();
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么CustomController :: getInstance()调用CustomController :: createFile()?