• 締切済み

PHPでの再帰を用いたツリー構造について

PHPを勉強中の初心者です。PHPで、ツリー構造を再帰関数を用いて実装するプログラムを作成し、そのツリーを表示しようとているのですが、どうもよくわかりません。 このプログラムの挙動としては、以下でクリエイトしたTreeオブジェクトを、preorder(トップダウン、左側から)で出力させるもので、期待値は以下のとおりです。 (期待値) preorder: 1 2 4 5 3 6 7 (クリエイトされたオブジェクト) $myTree = new Tree(1, new Tree(2, new Tree(4), new Tree(5)), new Tree(3, new Tree(6), new Tree(7))); =========サンプルプログラム================================ #!/usr/bin/env php <?php class Tree { var $top; var $left; var $right;     #コンストラクタを定義はこれであっているでしょうか。 function Tree($top, $left, $right){ $this ->top = $top; $this ->left = $left; $this ->right= $right; }; function preorder( ){         #preorder() メソッドを実装方法がよくわかりません。 } } $myTree = new Tree(1, new Tree(2, new Tree(4), new Tree(5)), new Tree(3, new Tree(6), new Tree(7))); function printPreorder($tree) { echo "preorder:\n"; $tree->preorder(create_function('$v', 'echo "$v\n";')); } printPreorder($myTree); ?>

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>うまく動作しません。 どううまく動作しないか、想像もつきません。 すくなくともphpinfo()がまともに動かないようであれば 別のプログラムも同様にまともに動かないような気がするのですが・・・。 >PHPはUNIXのルートサーバにしかインストールされていない おっしゃる用語の意味がよくわからないのですが、 そのサーバーの管理者にPHPがまっとうに動かない旨今回の事例を踏まえて 確認してみてはいかがですか?

ny_cs
質問者

お礼

失礼しました。作成した、info.phpのファイルパーミッションの問題でした。修正して再度実行したところ「PHP Version 5.1.6」であることがわかりました。

ny_cs
質問者

補足

<? phpinfo() ?> を記載したファイルinfo.phpというファイル名で保存しWebブラウザ経由で実行したところ、白い画面になってしまいました。セキュリティの観点から、この関数が削除されているといったこともあるのでしょうか? その他のPHPファイルはうまく動いています。 うちの大学の環境では、PHPはルートサーバにインストールされていて、各自の作業用Webディレクトリは、ルートサーバにマウントされるようになっていて、Apache経由であればPHPを実行できるのですが、コマンドライン経由では、パスが切られていないため、直接コマンドを実行することができないのです。 バージョンについては、確認してみます。ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

classの実装はバージョンによって大きく異なります。 どのバージョンのPHPか明示してください

ny_cs
質問者

補足

バージョンの確認はどのように行えばよいのかご教示いただけますか? ネット上で検索して、以下のコードをver.php ファイルに保存して実行してみましたが、うまく動作しません。 ちなみに、PHPはUNIXのルートサーバにしかインストールされていないため、コマンドラインでの確認は不可能です。よろしくお願いいたします。 <? phpinfo() ?>

関連するQ&A