1

私はOOPに不慣れです(そして、そのことについては、数か月前にプログラミングを開始しました)ので、クラスとオブジェクトはまだ私にとって少し異質な概念です。とにかく、後で処理するために、文字列と変数の組み合わせを配列に格納しようとしています。メソッドを参照してくださいdrawtable()。うまくdrawtable()印刷されますが、文字列の配列にすぎません。この問題は、変数を含めようとした、、およびプロパティを出力しようとしたときに発生します。ここで何が間違っているのでしょうか。注:セッション変数は正常に出力されます。tableheaderstableheaderstablelinktext

また、私は新しく、つぼみの悪い習慣を食い止めようとしているので、以下のコードの一般的な批評をいただければ幸いです。どうもありがとう。

<?php
class table{

    function __construct($type){
        if($type == "submittals"){

            $this->tableheaders = array('Specification Section', 'Submittal #', 'Description', 'Vendor or Manufacturer', 'Date Received By GC', 'File', 'Date Submitted', 'File', 'Date Requested for Review', 'Date Returned to GC', 'File', 'Status', 'Date Returned to Subcontractor or Vendor');

            $this->query = "***SELECT Query***";

            $this->tablelink = array("/pd/upload/" . $_SESSION['current_project'] . "/s/" . $row['file'], "edit_submittal.php?submittal_id=", "edit_submittal.php?submittal_id=" . $row['submittal_id']);

            $this->text = array($row['number'] . " - " . $row['name'], $this->row['submittal_num']);            
        }
    }

    function drawtable() {
        $this->numheaders = count($this->tableheaders);

        $this->db = mysqli_connect(***db connection info***);
        $this->results = mysqli_query($this->db, $this->query);
                $this->num_results = mysqli_num_rows($this->results);

        echo "  <table border=\"1\">
                    <tr>";  
                        for ($i = 0; $i < $this->numheaders; $i++) {
                            echo "<th>" . $this->tableheaders[$i] . "</td>";
                        }
        echo "      </tr>";

        for ($j=0; $j < $this->num_results; $j++) {
            $row = mysqli_fetch_assoc($this->results);

            echo "  <tr>";

            for($k = 0; $k < $this->numheaders; $k++) {
                echo "  <td><a href=\"" . $this->tablelink[$k] . "\">" . $this->text[$k] . "xxx</a></td>";
            }

        }
        echo "      </tr>
                </table>";
    }
}
?>

更新:これはうまくいきますが、まだ初心者のだらしのない空気が残っていると確信しています。提案?ありがとう

<?php
class Table{

    function __construct($type){
        if($type == "submittals"){

            $this->table_headers = array('Specification Section', 'Submittal #', 'Description', 'Vendor or Manufacturer', 'Date Received By GC', 'File', 'Date Submitted', 'File', 'Date Requested for Review', 'Date Returned to GC', 'File', 'Status', 'Date Returned to Subcontractor or Vendor');

            $this->query = "***SELECT query***";    
        }
    }

    function draw_table($type) {
        $this->num_headers = count($this->table_headers);

        $this->db = mysqli_connect(***db connection***);
        $this->results = mysqli_query($this->db, $this->query);
        $this->num_results = mysqli_num_rows($this->results);

        echo "  <table border=\"1\">
                    <tr>";  
                        for ($i = 0; $i < $this->num_headers; $i++) {
                            echo "<th>" . $this->table_headers[$i] . "</td>";
                        }
        echo "      </tr>";

        for ($j=0; $j < $this->num_results; $j++) {
            $row = mysqli_fetch_assoc($this->results);

            if($type == "submittals") {
                $this->table_link = array("/pd/upload/" . $_SESSION['current_project'] . "/s/" . $row['file'], "edit_submittal.php?submittal_id=", "edit_submittal.php?submittal_id=" . $row['submittal_id']);
                $this->text = array($row['number'] . " - " . $row['name'], $row['submittal_num'], $row['description']);         
            }

            echo "  <tr>";

            for($k = 0; $k < $this->num_headers; $k++) {
                echo "  <td><a href=\"" . $this->table_link[$k] . "\">" . $this->text[$k] . "</a></td>";
            }

        }
        echo "      </tr>
                </table>";
    }

    function get_table_headers() {
        echo $this->table_headers;
    }
    function get_query() {
        echo $this->query;
    }
    function get_table_link() {
        echo $this->table_link;
    }
    function get_text() {
        echo $this->text;
    }
}
?>
4

1 に答える 1

1

このようには機能しません。$row変数が未定義であるため、コンストラクターでアクセスすることはできません。$row['name']後で文字列を実際に使用するときに、PHP が etc. の内容を置き換える必要があることに気付くはずです。しかし、なぜそれが必要なのですか?代わりに、PHP はまったく見つけることができず$row、すべてがうまくいきません。$row実際には、未定義であることを示すエラーが表示されるはずです。

全体的に、あなたのコードにはかなり多くの問題があります。申し訳ありませんが、あなたはまだ OOP の一般的な概念をまったく理解していません。そして、ここでこれを説明するには時間がかかりすぎます。どうやら、OOP とは関係のない、あなたの知らない何かがあるようです。たとえば、変数がいつどこに存在するかについてのスコープ。

于 2013-01-12T16:51:51.867 に答える