• ベストアンサー

シンボルテーブルの中身を確認してみたい

extractが何か分からず、マニュアルを見たら、 シンボルテーブルてコトバが出てました。 検索したのですが、意味がよく分からないので、 実際にどういうものか中身を見てみたいのですが、 下記みたいに、プログラムから参照してみる方法はあるのでしょうか? ▽シンボルテーブルについて - メメメモモ   http://d.hatena.ne.jp/memememomo/20100410/1270856617

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

  • ベストアンサー
  • NARH
  • ベストアンサー率82% (88/107)
回答No.1

PHP extension の APD(Advanced PHP debugger)を有効にすると apd_get_active_symbols() 関数で見れるかもしれません。 > APD は Zend 拡張モジュールで、PHP 内部関数のコール方法に手を加えます。 そのため、他の Zend 拡張モジュール (たとえば Zend Optimizer など) との相性に注意が必要です。 とありますから、必ずしも見ることが出来るものでは無いようです。 シンボルテーブルは、 「PHP インタープリタ(実行環境)内にある、現在のスコープで定義されている変数名一覧があるテーブル」 ぐらいの意味でいいかと思います。 extrace はそのテーブルに(半ば強制的に?)値を追加、上書きできたりする関数らしいです。 #使ったことがなかったので <?php extract( array( 'foo' => 'bar' ) ); echo $foo; // $foo はソース上未定義なのに bar が表示される 初期化処理につかえなくもないのですが、使い処を間違えるとエラい目にあいそうなので、 あまり積極的に使いたい関数ではないですね。

参考URL:
http://jp.php.net/manual/ja/function.apd-get-active-symbols.php

その他の回答 (1)

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

シンボル=識別子(変数や関数の名前)でいいと思います。 一覧するには、php4.0.4以降なら、グローバル変数は、$GLOBALS に全部入ってるので、 var_dump($GLOBALS);  で一覧できます。どのscopeからも参照可能です。 現在の scope の変数を一覧するなら、get_defined_vars()は、特別なライブラリ不要で使えます。local scopeでは、local変数のみ取得、global scopeで実行すれば、php5.0以降では$GLOBALSも入ります。 extractをlocal スコープで実行したとき、どのスコープ変数に展開するのかの説明がないけど、やってみると、local変数になるようです。 ちなみに関数名一覧はget_defined_functions()で、ユーザー定義関数も一覧できます。

関連するQ&A

専門家に質問してみよう