示例:
class Top {
public function getParents($class = null, $plist = array()) {
$class = $class ? $class : $this;
$parent = get_parent_class($class);
if ($parent) {
$plist[] = $parent;
$plist = self::getParents(); // 可行
// self::getParents($parent, $plist); 可行
// $this->getParents(); 不可行(进入死循环)
// $this->getParents($parent, $plist); 可行
}
return $plist;
}
}
class Middle extends Top {}
class Bottom extends Middle {}
$o = new Bottom();
print_r($o->getParents());关于注释那四条,为什么会这样?
class Top {
public function getParents($class = null, $plist = array()) {
$class = $class ? $class : $this;
$parent = get_parent_class($class);
if ($parent) {
$plist[] = $parent;
$plist = self::getParents(); // 可行
// self::getParents($parent, $plist); 可行
// $this->getParents(); 不可行(进入死循环)
// $this->getParents($parent, $plist); 可行
}
return $plist;
}
}
class Middle extends Top {}
class Bottom extends Middle {}
$o = new Bottom();
print_r($o->getParents());关于注释那四条,为什么会这样?
两种方法是一样的,随意使用
只是有一点不同
this不能调用静态内容
你getParents没参的话,你第四句也错
但是getParents不是静态的喔
而且现在变得只能getParents有参数才正确,没有参数一律显示错误(找不到网页)
但是如果没参是错误的话,那么程序的最后一句时在外部调用getParents时怎么又正确呢?
所以第一次进入时 $class 可以为空,但在方法中递归时,参数 $class 是不能缺少的
否则总是 $class = $this; 而陷入死循环
但是self::getParents();这句可行喔
看这篇文章
http://www.cnblogs.com/devcjq/articles/2424738.html
显示找不到网页你的url或是环境有问题了
另外,死循环了,哪个也不会运行
其实是不是当执行到self::getParents();这句时的self::指的是Middle类,所以这也正确的这样子呢?而用$this->的话执行指的是$o代表的那个Bottom类,所以用$this->而没有参数的话就错这样子呢?
我怀疑你用的是山寨版的php6
还有我的php5的装了pear后好像没有了一个文件的
呃。。现在真的显示不能执行了(无法显示网页),用self::getParents();这句的话之前还可以的奇怪
“显示找不到网页你的url或是环境有问题了”
那么怎么办运行错误的PHP网页时才会说找不到网页,正确的就正确显示。。以前运行错误的PHP网页时也没有说找不到网页的,而是一片空白的
但我的php安装后就命名为“php5”,至于版本是多少就不知道了
咦?!我看到了我的不是山寨的喔。“php-5.2.17-Win32-VC6-x86”不高过5.4的