ホームページ > バックエンド開発 > PHPチュートリアル > PHPの抽象カテゴリに抽象メソッドがある場合、その抽象メソッドが最初に実行され、次に他のメソッドが実行される必要がありますか?

PHPの抽象カテゴリに抽象メソッドがある場合、その抽象メソッドが最初に実行され、次に他のメソッドが実行される必要がありますか?

WBOY
リリース: 2016-06-13 12:54:59
オリジナル
854 人が閲覧しました

PHP の抽象クラスに抽象メソッドがある場合、その抽象メソッドが最初に実行され、次に他のメソッドが実行される必要がありますか?
RT

<br />
abstract class Node {<br />
		private $debugMessages;<br />
		<br />
		public function __construct() {<br />
			$this->debugMessages = array();<br />
			$this->debug(__CLASS__.' constructor called.');<br />
		}<br />
		<br />
		public function __destruct() {<br />
			$this->debug(__CLASS__.' destructor called.');<br />
			$this->dumpDebug();<br />
		}<br />
		<br />
		protected function debug($msg) {<br />
			$this->debugMessages[] = $msg;<br />
		}<br />
		<br />
		private function dumpDebug() {<br />
			echo implode('<br />', $this->debugMessages);<br />
		}<br />
		<br />
		public abstract function getView();<br />
	}<br />
	<br />
	<br />
	class ForumTopic extends Node {<br />
		private $debugMessages;<br />
		<br />
		public function __construct() {<br />
			parent::__construct();<br />
			$this->debug(__CLASS__.' constructor called.');<br />
		}<br />
		<br />
		public function __destruct() {<br />
			$this->debug(__CLASS__.' destructor called.');<br />
			parent::__destruct();<br />
		}<br />
		<br />
		public function getView() {<br />
			return 'This is a view into '.__CLASS__.'<br />';<br />
		}<br />
	}<br />
	<br />
	$forum = new ForumTopic();<br />
	echo $forum->getView();<br />
ログイン後にコピー


実行結果:
これは ForumTopic
へのビューです ノード コンストラクターが呼び出されます。
ForumTopic コンストラクターが呼び出されます。
ForumTopic デストラクターが呼び出されました。
ノード デストラクターが呼び出されました。

しかし、new ForumTopic() を使用せずに getView() を呼び出して実行するにはどうすればよいでしょうか?

php デストラクター コンストラクター 関数 クラス
-----解決策---------
実行順序:
フォーラムトピック::__construct()
ノード::__construct()
Node::debug()
フォーラムトピック::debug()
フォーラムトピック::getView()
フォーラムトピック::__destruct()
フォーラムトピック::debug()
ノード::__destruct()
Node::debug()
Node::dumpDebug()
-----解決策---------
わかりませんあなたが望むもの あなたが何を言っても、最初に呼び出された方が実行されます。
最初に echo $forum->getView(); を実行するので、最初に出力します。これは ForumTopic
へのビューです。 オブジェクトが破棄されると、親クラスのデストラクターは $debugMessages 内のすべてのデータを出力します。このようにしてください:
ノード コンストラクターが呼び出されます。
ForumTopic コンストラクターが呼び出されます。
ForumTopic デストラクターが呼び出されました。
ノード デストラクターが呼び出されました。


__CLASS__ は現在のクラスを参照します

get_class($obj) はインスタンス $obj のクラスを参照します

------解決策--------

を入れると 保護された関数のデバッグ($msg) {
$this->debugMessages[] = $msg;
}

に変更します 保護された関数のデバッグ($msg) {
echo $msg;
}
実際の実行シーケンスを確認できます


-----解決策---------
引用:
また、__CLASS__ と get_class() の本質的な違いは何ですか?そのうちの 1 つは常にクラスを指しているようですが、もう 1 つはクラスのドメインに応じて異なるクラスを指しているようです。詳細は思い出せません

。 1 つは関数、もう 1 つは変数です。 get_class() にはオブジェクト パラメータが必要です。

あなたが書いた例はオーバーロードされています。

「しかし、new ForumTopic() を使わずに getView() を呼び出して実行するにはどうすればよいでしょうか? この文は理解できません。なぜ例と矛盾しているのですか
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート