通知:变量似乎未初始化

问题描述:

由于某种原因,我在我的代码中收到此通知。通知:变量似乎未初始化

变量$康恩似乎未初始化

我不明白为什么我看到这个通知。我想我会在正确的地方加入我的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>"; 
    } 

    } 

} 

$conn变量从include './includes/dbconn.php';到来。由于我没有收到任何PHP数据库错误,例如“未连接到数据库”或类似的东西,我认为我的连接是正确的。

的functions.php

function display_tutor_schedule($conn,$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($conn,$query); 

$i = 0; 
$appt_detail = array(); 
while ($row = sqlsrv_fetch_array($stmt)){ 
    $appt_detail[$i]['date'] = $row['date']; 
    $appt_detail[$i]['t_shedule_id'] = $row['t_shedule_id']; 
    $appt_detail[$i]['start_time'] = $row['start_time']; 
    $appt_detail[$i]['end_time'] = $row['end_time']; 
    $appt_detail[$i]['tutor_fname'] = $row['tutor_fname']; 
    $appt_detail[$i]['tutor_lname'] = $row['tutor_lname']; 
    $appt_detail[$i]['status_name'] = $row['status_name']; 
    $appt_detail[$i]['status_id'] = $row['status_id']; 

    $i++; 
} 




return $appt_detail; 

} 

my_class.php

<?php 

$calendar = new Calendar(); 
echo $calendar->show(); 

?> 

dbconn.php

$serverName = "myserver"; 
$connectionInfo = array("Database" => "my_database", "UID" => "user", "PWD" => "pwd"); 
$conn = sqlsrv_connect($serverName, $connectionInfo); 
+0

是否使用PHPStorm? –

+1

我们不知道'/ includes/functions.php'包含了什么,所以没有一种理智的方法来猜测解决方案。 – PeeHaa

+0

@MahmoudTantawy nop,netbeans –

如果你是使用netbeans或phpstorm,那么这可能是IDE问题。

检查https://netbeans.org/projects/php/lists/users/archive/2013-03/message/49phpstorm warning php variable might not have been defined

然而,这是可取的,你告诉我们,你包括检查其中的文件。

+0

等待wut? OP甚至没有运行代码? – PeeHaa

+0

他说:“由于我没有得到任何php数据库错误,如未连接到数据库或类似的东西,我认为我的连接是正确的。” –

+1

看起来他在IDE中遇到错误,并且在运行代码时一切正常,但不确定! –

由于变量首先在dbconn.php中初始化,因此IDE可能无法识别它。插入

$conn = null; 

public function show() { 
+0

该文件包含在调用的范围内。 – PeeHaa

+0

@PeeHaa准确地说,因为它是我的范围我虽然我不会有任何问题=/ –

+0

@ArielMaduro什么给你错误?当你运行php代码还是它是一个IDE警告? – PeeHaa

不要使用后,包括或全局您的变量,这是不好的。

相反,你应该使用类

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

} 

使用

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

虽然你是正确的,但这并不以任何方式实际回答OP。 – PeeHaa

+0

@PeeHaa用这段代码他不会得到'变量$ conn似乎是未初始化的' – meda

+0

用代码' PeeHaa