Php OOP新手-如何在数组中存储变量?

Php OOP新手-如何在数组中存储变量?,php,Php,我是OOP新手(就这一点而言,编程是几个月前开始的),所以类和对象对我来说仍然是一个陌生的概念。无论如何,我正在尝试将字符串和变量的混合存储在一个数组中,以供以后处理。请参见方法drawtable()drawtable()可以很好地打印tableheaders,但是tableheaders只是一个字符串数组。当我试图打印tablelink和text属性时,问题就出现了,我试图在其中包含变量。我做错了什么?注意:会话变量输出良好 我也希望能对下面的代码提出一般性的批评,因为我是新来的,正试图将任何

我是OOP新手(就这一点而言,编程是几个月前开始的),所以类和对象对我来说仍然是一个陌生的概念。无论如何,我正在尝试将字符串和变量的混合存储在一个数组中,以供以后处理。请参见方法
drawtable()
drawtable()
可以很好地打印
tableheaders
,但是
tableheaders
只是一个字符串数组。当我试图打印
tablelink
text
属性时,问题就出现了,我试图在其中包含变量。我做错了什么?注意:会话变量输出良好

我也希望能对下面的代码提出一般性的批评,因为我是新来的,正试图将任何坏习惯扼杀在萌芽状态。非常感谢

<?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;
    }
}
?>

它不是这样工作的。您无法访问构造函数中的
$row
,因为那里的变量未定义。您希望PHP意识到,在以后实际使用字符串时,它应该替换
$row['name']
等的内容。但是,为什么要这样做呢?相反,PHP根本找不到
$row
,一切都出错了。实际上,您应该会得到一个错误,告诉您,
$row
未定义


总的来说,你的代码有很多错误。很抱歉这么说,但是您还没有掌握OOP的一般概念。在这里解释这一点需要很长时间。显然,有些东西甚至与OOP无关,你不知道。例如,作用域以及变量存在的时间和位置。

它不是这样工作的。您无法访问构造函数中的
$row
,因为那里的变量未定义。您希望PHP意识到,在以后实际使用字符串时,它应该替换
$row['name']
等的内容。但是,为什么要这样做呢?相反,PHP根本找不到
$row
,一切都出错了。实际上,您应该会得到一个错误,告诉您,
$row
未定义


总的来说,你的代码有很多错误。很抱歉这么说,但是您还没有掌握OOP的一般概念。在这里解释这一点需要很长时间。显然,有些东西甚至与OOP无关,你不知道。范围,例如变量存在的时间和位置。

对标题的回答是“一般评论”:按照惯例,类名以大写字母开头,以便能够区分类名与函数名和变量名。函数和变量都以小写字母开头,但函数后面通常有
()
。对于所有三个(函数名、变量名和类名):如果名称由多个单词组成(这很好),则名称中的新词以大写字母开头(但第一个字母仅以类开头!)为了提高可读性。对标题的回答是“一般评论”:按照惯例,类名以大写字母开头,以便能够区分类名与函数名和变量名。函数和变量都以小写字母开头,但函数后面通常有
()
。对于所有三个(函数名、变量名和类名):如果名称由多个单词组成(这很好),则名称中的新词以大写字母开头(但第一个字母仅以类开头!),以提高可读性。好的,现在就这样。在过去的几个月里,我的整个编程生涯包括阅读一本PHP书籍的6章。我希望有很多事情我不知道。我昨天才开始尝试学习OOP。也就是说,您的评论说我无法访问构造函数中的$row,因为它在那里未定义,这是有道理的,我认为这是问题所在。我该怎么做才能等到找到$tablelink和$text时再查找$row?总的方向是我在这里寻找的。感谢您必须在循环中的
drawtable()
中构造字符串,因为只有
$row
被定义。您甚至不需要在那里使用类,因为您没有状态。只有当您的程序具有某种跟踪状态时,使用类才有用。在实例/类变量中,您可以存储有关程序正在执行的操作的信息。如果你没有这些,就用一个简单的函数。(这是非常简单的!)好吧,现在。在过去的几个月里,我的整个编程生涯包括阅读一本PHP书籍的6章。我希望有很多事情我不知道。我昨天才开始尝试学习OOP。也就是说,您的评论说我无法访问构造函数中的$row,因为它在那里未定义,这是有道理的,我认为这是问题所在。我该怎么做才能等到找到$tablelink和$text时再查找$row?总的方向是我在这里寻找的。感谢您必须在循环中的
drawtable()
中构造字符串,因为只有
$row
被定义。您甚至不需要在那里使用类,因为您没有状态。只有当您的程序具有某种跟踪状态时,使用类才有用。在实例/类变量中,您可以存储有关程序正在执行的操作的信息。如果你没有这些,就用一个简单的函数。(这非常简单!)