php中什么是abstract,PHP中abstract种中有abstract方法是否最先执行abstract方法,然后才执行其他方法...

PHP中abstract类中有abstract方法是否最先执行abstract方法,然后才执行其他方法?

rt

abstract class Node {

private $debugMessages;

public function __construct() {

$this->debugMessages = array();

$this->debug(__CLASS__.' constructor called.');

}

public function __destruct() {

$this->debug(__CLASS__.' destructor called.');

$this->dumpDebug();

}

protected function debug($msg) {

$this->debugMessages[] = $msg;

}

private function dumpDebug() {

echo implode('
', $this->debugMessages);

}

public abstract function getView();

}

class ForumTopic extends Node {

private $debugMessages;

public function __construct() {

parent::__construct();

$this->debug(__CLASS__.' constructor called.');

}

public function __destruct() {

$this->debug(__CLASS__.' destructor called.');

parent::__destruct();

}

public function getView() {

return 'This is a view into '.__CLASS__.'
';

}

}

$forum = new ForumTopic();

echo $forum->getView();

执行结果:

This is a view into ForumTopic

Node constructor called.

ForumTopic constructor called.

ForumTopic destructor called.

Node destructor called.

但没有new ForumTopic()怎么能够调用执行getView()?

php

destructor

constructor

function

class

------解决方案--------------------

执行顺序:

ForumTopic::__construct()

Node::__construct()

Node::debug()

ForumTopic::debug()

ForumTopic::getView()

ForumTopic::__destruct()

ForumTopic::debug()

Node::__destruct()

Node::debug()

Node::dumpDebug()

------解决方案--------------------

不知道你想说啥,哪个先调用就执行哪个。

你是先执行echo $forum->getView();所以先输出:This is a view into ForumTopic

在对象的销毁的时候,父类析构函数把$debugMessages中的所有数据打印出来了。就下面那样:

Node constructor called.

ForumTopic constructor called.

ForumTopic destructor called.

Node destructor called.

__CLASS__指是的当前类

get_class($obj)指的是实例$obj的类

------解决方案--------------------

如果你把

protected function debug($msg) {

$this->debugMessages[] = $msg;

}

改成

protected function debug($msg) {

echo $msg;

}

你就可以看到真正的执行顺序

------解决方案--------------------

引用:还有请问__CLASS__与get_class()有什么本质的区别?好像其中一个总是指向一个类,而另一个则根据类的域不同而指向不同的类,具体我记不清楚了

一个是函数,一个是变量。get_class()需要对象参数。

你写的例子是重载了。

“但没有new ForumTopic()怎么能够调用执行getView()? ”你这句话没弄懂,怎么跟你的例子有点矛盾

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值