PHP OOP调用非对象上的成员函数,快把我逼疯了


PHP OOP Call to a member function on a non-object driving me nuts

我目前正在编写一个脚本,以列出我的数据库中的所有团队,列表内将是团队支付信息我有两个功能,这两个功能在显示数据时需要注意。代码如下:

          $teams = $teams->team_list();
          foreach ($teams as $team) {
          $payments = $teams->fetch_team_payment_info($team['team_id']);
           echo $team['team_id'];
          }

$team->team_list()工作没有任何错误,并做它应该做的事情,然而

          $payments = $teams->fetch_team_payment_info($team_id);

没有。

我已经使用下面的代码正确设置了$teams类:
    $teams = new teams($g8b_db);
    $teams->entryYear = $system->get_entry_year();
    class teams {
        private $db; 
        public $entryYear;
        public function __construct(Database $db) {
            $this->db = $db;
        }
        public function team_list() {
            $sql = "SELECT td.*, CONCAT(me.First_Name,' ', me.Surname) AS managers_full_name, me.Telephone AS managers_telephone  
            FROM `team_details` td 
            JOIN `members` me 
            ON me.id = td.managers_user_id 
            WHERE td.entry_year = '" . $this->entryYear. "'";
            $registered_teams = $this->db->fetch_all_array($sql);
            return $registered_teams;
        }
        public function fetch_team_payment_info($team_id) {
            $fetch_payments = $this->db->fetch_array_assoc($this->db->query("SELECT `method`, `account_holder`, `date` FROM `payments` WHERE `team_id`='".$team_id."'"));
            $team = $this->db->fetch_all_array("SELECT `status` FROM `team_details` WHERE `team_id`='".$team_id."'");
            if ($team['status']=="0") {
                $status_text = "Marked As Unpaid";
            } elseif ($team['status']=="1") {
                $status_text = "Marked As Paid";
            } elseif ($team['status']=="2") {
                $status_text = "Rejected";
            }
            $payment_method             =     $fetch_payments['method'];
            $payment_account_holder     =     $fetch_payments['account_holder'];
            $payment_date               =     $fetch_payments['date'];
            $payment_text = "".$payment_method." by ".$payment_account_holder." on ".$payment_date."";
            if ($payment_method == "Paypal") {
                $label_end_payment = "primary"; 
            } 
            if ($payment_method == "Bank Transfer") {
                $label_end_payment = "info"; 
            }
            $payment_label = '<a class="label label-'.$label_end_payment.'" data-placement="bottom" tabindex="0" role="button" data-toggle="popover" data-toggle="popover" data-trigger="focus" title="Payment Method" data-content="'.$payment_text.'">'.$payment_method.'</a>';
            $data = array(
                'payment_label'          => $payment_text,
                'status'                 => $status_text
            );
            return $data;
        }
        }

我不明白为什么这个错误会显示如果team_list工作。

如果您对这个问题有任何帮助,我将不胜感激。

你在循环中重新分配了$teams。

team_list()没有返回"teams"类,所以你会得到一个错误。

有很多方法可以修复它,这里是其中之一:

foreach ($teams->team_list() as $team) {
  $payments = $teams->fetch_team_payment_info($team_id);
  echo $team['team_id'];
}