• ベストアンサー

デストラクタとregister_shutdown_

デストラクタと、 register_shutdown_function()関数 の違いを教えてください。 検索すると、 ・デストラクタ…PHP5 ・register_shutdown_function()関数…PHP4・5 みたいなのですが、 それ以外、何が違うのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#158634
noname#158634
回答No.1

http://d.hatena.ne.jp/kanonji/20090707/1246977373 ちなみに、PHP5とかの話の前に「デストラクタ」は機能だから比較の次元が違う。 「CGIとPHPの違いを教えて下さい」というよくある質問に例えればわかりやすいでしょうか。

re999
質問者

お礼

回答ありがとうございましたー

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • スクリプト終了時に呼び出す関数register_shutdown_function()について

    $objPage = new LC_Page_Admin_Ex(); register_shutdown_function(array($objPage,"destroy")); $objPage->init(); $objPage->process(); のプログラムでスクリプト終了時に呼び出す関数register_shutdown_function()を入れる意味の分かる人いませんか。

    • ベストアンサー
    • PHP
  • [PHP] デストラクタについて教えて下さい

    あるPHPの入門書にデストラクタについての解説があります。 *デストラクタ 「コンストラクタとは反対に、オブジェクトが破棄されるタイミングで実行されるのがデストラクタです。名前は __destructに固定されている。 デストラクタには、クラスの中で使用したリソースを破棄するなど、主に終了するときの処理を記述するのが一般的です。」 とあります。 以下のような記述をしました。(person.php) <?php class Person{ public $lastName; public $firstName;  public function __construct($lastName, $firstName){ $this->firstName = $firstName; $this->lastName = $lastName; } public function show(){ print "<p>私の名前は {$this->lastName} {$this->firstName}です。</p>"; } public function __destruct(){ print "<p>インスタンスが破棄されました。<p>";  } } ?> 上の記述をインスタンス化する記述です。(instancne.php) <?php require_once('person.php'); $p = new Person('田中', '幸太郎'); $p->show(); ?> <表示結果> 私の名前は 田中 幸太郎です。 インスタンスが破棄されました。 となります。試しにもうひとつインスタンスを追加します。 <?php require_once('person.php'); $p = new Person('田中', '幸太郎'); $p->show(); $p1 = new Person('鈴木', '京子'); $p1->show(); ?> <表示結果> 私の名前は 田中 幸太郎です。 私の名前は 鈴木 京子です。 インスタンスが破棄されました。 インスタンスが破棄されました。 説明にある、 「オブジェクトが破棄されるタイミングで実行されるのがデストラクタです。」 「デストラクタには、クラスの中で使用したリソースを破棄するなど、主に終了するときの処理を記述するのが一般的です。」 これらの意味がわかりません。 コンストラクタの 「new 演算子によってインスタンス化されるタイミングで実行される」 「プロパティの初期化」 などの意味は理解できているつもりです。 デストラクタを使うと「オブジェクトが破棄される」、「クラスの中で使用したリソースを破棄する」と ありますが、『一度インスタンスを作るとクラス内のリソースが破棄されるのかな?』と思い ためしにもう一つインスタンスを作成しました。上記の通り問題なく使えています。 膨大な記述になると、クラス、この場合は 「class Person」」は再利用出来なくすると言った意味になるのでしょうか? 他の教材やネットで検索してみたりしたのですが、イメージがつかめません。 以下のPHP公式のサイトから考えてみると、クラス内で参照できるものがなければ、コールされるという風に解釈できるかもしれませんが、意味がわかりません。 デストラクタ(__destruct)はコンストラクタ(__construct)の反対というように記述されているものもありますが余計に意味が分かりません。 初学者にもわかるようにデストラクタについて教えてもらえないでしょうか? またどういうケースで利用するのかもよく分かりません。 そのあたりも併せて教えて下さい。 宜しくお願いいたいます。 (参考) デストラクタ __destruct(): void PHP には、C++ のような他のオブジェクト指向言語に似たデストラクタの概念があります。 デストラクタメソッドは、 特定のオブジェクトを参照するリファレンスがひとつもなくなったときにコールされます。 あるいは、スクリプトの終了時にも順不同でコールされます。 https://www.php.net/manual/ja/language.oop5.decon.php

    • ベストアンサー
    • PHP
  • C++ Vectorのデストラクタ

    C++ Vectorのデストラクタ boost::any型のVectorに自作クラスをpush_backで入れると、なぜかその自作クラスのデストラクタが呼ばれてしまって困っています。 またそのクラスの関数を実行すると同じようにデストラクタが呼ばれてしまいます。 

  • spl_autoload_registerについて

    PHPのspl_autoload_registerについて、2つ教えてください ■質問1 ・(func1の中で複数処理するのではなく)この関数自体を2つ書いても良い? ・その場合、後から書いた方が優先される? spl_autoload_register(func1()); spl_autoload_register(func2()); ■質問2 ・spl_autoload_registerで登録しているパスを確認する方法は? ・get_include_pathみたいに、読み込むよう設定されているパスを確認したい

    • ベストアンサー
    • PHP
  • コンストラクタ・デストラクタ

    プログラミング言語はC++ C++を触り始めたばかりの素人です。 コンストラクタとデストラクタについて質問です。 下記に参考にしているウェブページから簡潔にしてコードを書いてみました。 コンストラクタ、デストラクタの中はそれぞれに、○○が呼び出されましたと書いてあるだけでよく分からなかったので別のウェブページを見たら コンストラクタは Sample::Sample(){ n=0; } みたいな例があったのですが、このように変数に予め何かの値を代入しておくという事で合ってますか? デストラクタは理解できていません。 下記の例では、どのような処理を書けばいいのでしょうか? #include<iostream> using namespace std; class Sample { private: int n; public: void Show(); Sample(); ~Sample(); }; void Sample::Show() { cout << n << endl; } Sample::Sample() { // n=0; std::cout << "コンストラクタが呼び出されました" << std::endl; } Sample::~Sample() { // どんな処理? std::cout << "デストラクタが呼び出されました" << endl; } main() { Sample sample; sample.Show(); return 0; } 実行結果 コンストラクタが呼び出されました 1     ←コンストラクタ関数内の//を削除で0になることは確認 デストラクタが呼び出されました

  • 自作関数におけるコンストラクタとデストラクタ

    お世話になります。 定義クラスにおいて、オブジェクト生成時と解放時にコールされる関数(__construct()、__destruct())は有名ですが、クラス内に定義した自作関数がコールされた時と終了(?)した時に、コールされる関数は存在するのでしょうか。 現在、自作した関数の最初と最後に、ログ書き込み用の自作関数を仕込む事で、希望した挙動を実装していますが、自作関数におけるコンストラクタ、デストラクタの様な関数があれば楽かなと、色々検索したのですが、今ひとつヒットしませんでした。 ご存じの方、情報提供頂ければ嬉しいです。

    • 締切済み
    • PHP
  • レジスターについて質問です。

    レジスターについて質問です。 レジスターには「飲食店向き」「物販店向き」などありますが、違いはなんでしょうか? 小規模の飲食店(40席程度)なら、物販向けを使用できますか? それとも、○○の機能が付いてない、等の制約があるのでしょうか? 宜しくお願いします

  • レジスタの種類について

    こんにちは edp とはどんなレジスタでしょうか インターネットで検索してもなかなか見つかりません よろしくお願いします

  • register_globalや$$という変数について・・・

    PHPの勉強を始めて2週間足らずの初学者です。 質問させていただきます。 環境はwindowsXP+xampp+PHP5.2です。 現在、やや古めのPHP書籍のサンプルを試しています。 register_globals=Onの状態では、問題なく動作しました。 しかし、Offにすると反応しない部分があります。 test.phpにてsupport.phpをincludeしているのですが、 以下の箇所をそれぞれregister_globals=Off用に書き換える知恵が ありません。ほんの一部のみの抜粋にて恐縮ですがご査収願います。 ---「test.phpの一部」----------------------------------------- echo '<INPUT TYPE="radio" NAME="',$name,'"VALUE="',$kaitoubango,'">',"$val\n<br />";} ---「support.phpの一部」-------------------------------------- $kaitoubango++; $name = $kaitoubango; $val = $$name; -------------------------------------------------------------- 繰り返しになりますが、register_globals=Onの状態では、問題なく動作しましたが、Offでこの状態でフォームアクションしても$val = $$name;に値がありません。 「support.php」の$$nameを$_POST['name']に変更すれば、可能かと思いましたが、ダメでした。 なお、部分的な質問になりますが、 (1)「test.php」のNAME="',$name,'"VALUE="',$kaitoubango,'"ですが、 何故、NAME="$name" VALUE="$kaitoubango"でないのでしょうか? 「',」は何を意味しているのでしょうか? (2)「support.php」の$$nameという変数ですが、$が2つ連続した変数は今のところ、初めて見ました。これはどういう意味なのでしょうか? お詳しい方がおられましたら、何卒アドバイスのを頂戴できればと思います。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • classの使い方について

    とある書籍にて require_once "MDB2.php"; require_once "Smarty.class.php"; class BBS extends Smarty{  private $_db;  public function __construct(){   $this->Smarty();   $this->template_dir = "{$dir}/themes";   $this->compile_dir = "{$dir}/templates_c";   $this->config_dir = "{$dir}/config";   $this->config_load("app.conf",basename($_SERVER["SCRIPT_NAME"],".php"));   $this->security=TRUE;   $this->secure_dir=array("{$dir}/image");   $this->_db=MDB2::connect($this->get_config_vars("db_string"));  }  public function __destruct(){   if(!PEAR::isError($this->_db)) $this->_db->disconnect();  }  public function get_db(){ return $this->_db; } } $Bbs = new BBS(); $db = $Bbs->get_db(); $db->setCharset('ujis'); と、あるのですがサーバーがPHP4の為、それに適用させたいのですがどのようにすればいいのでしょうか。ローカルサーバーはPHP5なので問題ないのですが。 class BBS extends Smarty{  var $_db;  function BBS(){   $this->Smarty();   $this->template_dir = "{$dir}/themes";    ~省略~  }  function shutdown(){   if(!PEAR::isError($this->_db)) $this->_db->disconnect();  }  register_shutdown_function("shutdown");  function get_db(){ return $this->_db; } } 上記で試してみたのですが Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in D:\aki\public_html\1\class\smarty.php on line 33 とエラーが出てしまいデストラクタがうまくできない状態です。 PHP4のクラスについて調べてみたが応用できそうなのが見つからなくて・・・ ご教授を願えたらと思います。

    • 締切済み
    • PHP
このQ&Aのポイント
  • 法律の条件について疑問があります。法律用語では、「とき」と「場合」は条件を意味すると言われていますが、両者は同じ意味なのでしょうか?
  • ある法律関係の書類を作成中で、「甲は、・・・の『場合』において、・・・した『とき』は、・・・する。」と書きたいのですが、日本語として違和感があります。どちらの表現が妥当でしょうか?
  • 法律用語の「とき」と「場合」は、条件を意味する場合があります。しかし、重ねて2回も同じ言葉を使用すると、文章としてこなれない印象を与えることがあります。表現方法に関して悩んでいます。
回答を見る