Php 注意:变量似乎未初始化

Php 注意:变量似乎未初始化,php,Php,出于某种原因,我在代码中收到了此通知 变量$conn似乎未初始化 我不明白为什么我会看到这个通知。我想我把我的include放在了正确的位置 Class Calendar { public function show() { include './includes/dbconn.php'; include_once './includes/functions.php'; for ($i=0; $i<$weeksInMonth; $i++) {

出于某种原因,我在代码中收到了此通知

变量$conn似乎未初始化

我不明白为什么我会看到这个通知。我想我把我的
include
放在了正确的位置

Class Calendar {

  public function show() {
    include './includes/dbconn.php';
    include_once './includes/functions.php';

    for ($i=0; $i<$weeksInMonth; $i++) {

      // Create days in a week
      for ($j=1;$j<=7;$j++) {

        $cal_date = (string)$this->currentDate;
        $tutor_date = display_tutor_schedule($conn,$cal_date);

        if(isset($tutor_date[$j]['date'])) {
          $content .= $this->_showDay($i*7+$j, $tutor_date[$j]['date']);
        }
        else {
          $content .= $this->_showDay($i*7+$j, 0);
        }
      }
      $content .="</tr>";
    }
  }

}
my_class.php
如果您使用的是netbeans或phpstorm,那么这可能是IDE问题

检查和


但是,建议您向我们显示包含的文件以进行检查。

因为变量是在dbconn.php中首次初始化的,所以IDE可能无法识别它。插入

 $conn = null;
排队后

public function show() { 

不要对变量使用includes或global,这很糟糕

相反,您应该使用类

class Database {

    private $conn;

    public function __construct(){
        $serverName = "myserver";
        $connectionInfo = array("Database" => "my_database", 
                                "UID" => "user", 
                                "PWD" => "pwd");
        $this->conn = sqlsrv_connect($serverName, $connectionInfo);
    }

    public function  get_connection(){
        return $this->conn;
    }
}
Calendar.php

class Calendar
{
    private $conn;
    public $weeksInMonth;

    function __construct($conn){
        $this->conn = $conn;
    }


    public function show()
    {
        $content = "";
        for ($i = 0; $i < $this->weeksInMonth; $i++) {
            //Create days in a week
            for ($j = 1; $j <= 7; $j++) {
                $cal_date = (string)$this->currentDate;
                $tutor_date = display_tutor_schedule($cal_date);

                if (isset($tutor_date[$j]['date'])) {
                    $content .= $this->_showDay($i * 7 + $j, $tutor_date[$j]['date']);
                } else {
                    $content .= $this->_showDay($i * 7 + $j, 0);
                }
            }
            $content .= "</tr>";
        }
        return $content;
    }

    function display_tutor_schedule($tutor_date)
    {
        $query = "select * from [dbo].[TUTOR_SCHEDULE] "
            . "LEFT JOIN [dbo].[TUTOR] "
            . "ON [dbo].[TUTOR_SCHEDULE].tutor_id = [dbo].[TUTOR].tutor_id "
            . "LEFT JOIN [dbo].[STATUS] "
            . "ON [dbo].[STATUS].status_id = [dbo].[TUTOR_SCHEDULE].status_id "
            . "WHERE [dbo].[TUTOR_SCHEDULE].date = '$tutor_date' ";

        $stmt = sqlsrv_query($this->conn, $query);

        $appt_detail = array();
        while ($row = sqlsrv_fetch_array($stmt)) {
            $appt_detail[] = $row;
        }
        return $appt_detail;
    }

}

你在使用PHPStorm吗?我们不知道
/includes/functions.php
包含什么,所以没有合理的方法来猜测解决方案。@MahmoudTantawy-nop,netbeans@PeeHaa问题在
/includes/dbconn.php中,而不是在
/includes/functions中。php
看起来像是netbeans和phpstorm的问题,检查一下,他说“由于我没有收到任何php数据库错误,例如未连接到数据库或类似的错误,因此我假设我的连接是正确的。“看起来他在IDE中遇到了错误,当运行代码时,一切都很好,但不确定!该文件包含在调用它的作用域中。@PeeHaa完全正确,因为它是我的作用域,我想我不会有任何问题=/@ArielMaduro是什么给了你错误?这是当你运行php代码的时候还是IDE警告的时候?你有没有。。。。喜欢伊杜诺。。。。实际运行代码以检查是否只是IDE变得混乱,而不是代码中的实际错误?因为听起来@MahmoudTantawy几乎是有钱人。IDE可能不会检查变量是否在包含的文件中定义。因此,如果你在执行代码时没有收到警告,那就没有问题。虽然你是正确的,但这并没有以任何方式回答OP。@PeeHaa用这段代码他不会得到
变量$conn似乎是未初始化的
,就像你说的那样@PeeHaa我是正确的,如果我的回答帮助OP清除错误,那么我很高兴。不管你怎么想
public function show() { 
class Database {

    private $conn;

    public function __construct(){
        $serverName = "myserver";
        $connectionInfo = array("Database" => "my_database", 
                                "UID" => "user", 
                                "PWD" => "pwd");
        $this->conn = sqlsrv_connect($serverName, $connectionInfo);
    }

    public function  get_connection(){
        return $this->conn;
    }
}
class Calendar
{
    private $conn;
    public $weeksInMonth;

    function __construct($conn){
        $this->conn = $conn;
    }


    public function show()
    {
        $content = "";
        for ($i = 0; $i < $this->weeksInMonth; $i++) {
            //Create days in a week
            for ($j = 1; $j <= 7; $j++) {
                $cal_date = (string)$this->currentDate;
                $tutor_date = display_tutor_schedule($cal_date);

                if (isset($tutor_date[$j]['date'])) {
                    $content .= $this->_showDay($i * 7 + $j, $tutor_date[$j]['date']);
                } else {
                    $content .= $this->_showDay($i * 7 + $j, 0);
                }
            }
            $content .= "</tr>";
        }
        return $content;
    }

    function display_tutor_schedule($tutor_date)
    {
        $query = "select * from [dbo].[TUTOR_SCHEDULE] "
            . "LEFT JOIN [dbo].[TUTOR] "
            . "ON [dbo].[TUTOR_SCHEDULE].tutor_id = [dbo].[TUTOR].tutor_id "
            . "LEFT JOIN [dbo].[STATUS] "
            . "ON [dbo].[STATUS].status_id = [dbo].[TUTOR_SCHEDULE].status_id "
            . "WHERE [dbo].[TUTOR_SCHEDULE].date = '$tutor_date' ";

        $stmt = sqlsrv_query($this->conn, $query);

        $appt_detail = array();
        while ($row = sqlsrv_fetch_array($stmt)) {
            $appt_detail[] = $row;
        }
        return $appt_detail;
    }

}
$db = new Database();
$conn = $db->get_connection();
$calendar = new Calendar($conn);
$calendar->weeksInMonth = 4;
echo $calendar->show();