質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

Q&A

解決済

1回答

4750閲覧

PHP デストラクターが実行されない理由を教えてください

tow_in_bee

総合スコア11

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

0グッド

0クリップ

投稿2014/08/13 03:22

PHPで下記のコードを作って実行しましたが、exitをしても__destructが呼ばれません。
どなたか、なぜこういうことが起きるか説明していただけませんか?

lang

1class MyDestructableClass { 2 function __construct() { 3 print "\nIn constructor\n"; 4 $this->name = "MyDestructableClass"; 5 } 6 7 function __destruct() { 8 print "\nDestroying " . $this->name . "\n"; 9 } 10} 11 12$obj = new MyDestructableClass();

追記:以下がすべてのコードです。Symfonyのテスト環境で、フレームワークさえわかっていれば簡単に複写できるようになっています。

lang

1require_once dirname(__FILE__).'/../bootstrap/Doctrine.php'; 2 3$profiler = new Doctrine_Connection_Profiler(); 4 5$conn = Doctrine_Manager::connection(); 6$conn->setListener($profiler); 7 8$t = new lime_test(0, new lime_output_color()); 9 10class MyDestructableClass { 11 function __construct() { 12 print "\nIn constructor\n"; 13 $this->name = "MyDestructableClass"; 14 } 15 16 function __destruct() { 17 print "\nDestroying " . $this->name . "\n"; 18 } 19} 20 21$obj = new MyDestructableClass(); 22$news = new News(); 23 24$news->setUrl('http://test'); 25$news->setHash('http://test'); 26$news->setTitle('http://test'); 27$news->setSummarize('http://test'); 28$news->setAccountId(1); 29$news->setCategoryId(1); 30$news->setThumbnail('http://test'); 31$news->setCreatedAt(date('Y-m-d H:i:s',time())); 32$news->setUpdatedAt(date('Y-m-d H:i:s',time())); 33$news->save(); 34exit();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

次の場合は、__destructは呼ばれません。

  • 別の__destructで"exit"が呼ばれている場合
  • PHPのバージョンによりますが、"register_shutdown_function"関数で"exit"が呼ばれている場合
  • コードのどこかに致命的なエラーがある場合
  • 別の__destructで例外が投げられた場合
  • __destructで例外を扱おうとしたとき(PHP >= 5.3.0)

投稿2014/08/14 07:30

hokuto

総合スコア152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問