0

我正在使用我正在开发的一个类的框架,并且在完成它之前我正在对其进行测试。

但是,我遇到了几个似乎干扰其执行的错误。

以下是 php 警告/错误:

Notice: A session had already been started - ignoring session_start() in
/var/www/VRC_Header2.php on line 2

Strict Standards: Redefining already defined constructor for class CheckOut in 
/var/www/CheckOut_old.php on line 18

这是涉及的两个类:

<?php //Checkout class - NOTE: Add exception handler later

class CheckOut extends DB_MySQL{

    public $fName;

    public $lName;

    public $numberOut;

    public $p_id;

     public function __construct($dbuser, $dbpass, $dbhost, $dbname) 
     {

        parent::__construct($dbuser, $dbpass, $dbhost, $dbname);

        $this->connect();

     }



    //Grab the values of the territory being checked out



    public function checkOut($numberOut)
    {

        $this->numberOut=$numberOut;

        /*
         *Begin checkout function that inserts into database.
         *Make sure all tests are run BEFORE calling this method.
         *Begin checkout function:
        */

        //Check Connection

        $this->checkConnect();

        //Start Checkout

        $stmt = $this->dbh->prepare("INSERT INTO checkOut(t_id, p_id, checkTime, due) VALUES(:param1, :param2, curdate(), date_add(curdate(), interval 3 month))");

        $stmt->bindParam(':param1', $this->numberOut);

        $stmt->bindParam(':param2', $this->p_id);

        $stmt->execute();


        if($stmt == FALSE)

                        return false;
        else

            return true;            
    }



    private function checkConnect()
    {

        if(!isset($this->dbh))

            $this->connect();

    }               

    public function territoryCheck($numberOut)
    {

        $this->numberOut = $numberOut;

        //Execute test

        $this->checkConnect();

        $stmt = $this->dbh->prepare("SELECT t_id FROM Territory WHERE t_id = :param1");

        $stmt->bindParam(':param1', $this->numberOut);

        $stmt->execute();           

        $stmt->fetch();


        //Determine value of test

        if($stmt == FALSE)
        {
            return FALSE;
        }   
    }



    public function publisherCheck($lName, $fName)
    {

        $this->lName = $lName;

        $this->fName = $fName;

        //Execute test

        $this->checkConnect();

        $stmt = $this->dbh->prepare("SELECT p_id FROM People WHERE lastName = :param1 AND firstName = :param2");

        $stmt->bindParam(':param1', $this->lName);

        $stmt->bindParam(':param2', $this->fName);

        $stmt->execute();



        //Determine value of test

        if($stmt == FALSE)
        {
            return FALSE;
        }
        else
        {

            $dummyvar = $stmt->fetch();
            $this->p_id = implode($dummyvar);
        }           
    }

    public function isTerritoryOut($numberOut)
    {
        //Execute test

        $this->checkConnect();

        $this->numberOut = $numberOut;

        $stmt = $this->dbh->prepare("SELECT t_id FROM checkIn WHERE t_id = :param1");

        $stmt->bindParam(':param1', $this->numberOut);

        $stmt->execute();

        $stmt->fetch();


        //Determine value of test

        if($stmt == FALSE)
        {
            return FALSE;
        }   
    }       
}   
?>

和另外一个:

include 'VRC_Header2.php';

class DB_MySQL {

    protected $dbuser;

    protected $dbpass;

    protected $dbhost;

    protected $dbname;

    protected $dbh; // Database connection handle       

    public function __construct($dbuser, $dbpass, $dbhost, $dbname)
    {

        $this->dbuser = $dbuser;

        $this->dbpass = $dbpass;

        $this->dbhost = $dbhost;

        $this->dbname = $dbname;
    }

    //Used to create connections - almost always called by execute()

    protected function connect()
    {

        try
        {

            $this->dbh = new PDO("mysql:host=$this->dbhost;dbname=$this->dbname",$this->dbuser,$this->dbpass);

        }
        catch(PDOException $e)
        {
            print "Error!: ".$e->getMessage()."<br/>";
                        die();
        }
    }       
}
?>

这些类不完整,但它们是功能性的。现在,我觉得真正的问题与构造函数有关(它们当然是错误的)。但这是我之前发布的关于该问题的问题以及我收到的答案:子类构造函数将如何与 php 中的父类构造函数交互?.

这里出了什么问题?

任何帮助表示赞赏。

编辑:我还应该添加我传递给类的值没有插入到数据库中。我认为这是错误的结果/

4

1 回答 1

1

您可能会注意到<?php将发送开始标记之前的空格或换行符。

严格标准:在第 18 行的 /var/www/CheckOut_old.php 中为类 CheckOut 重新定义已定义的构造函数

在这里,您为您的应用程序定义了 2 个构造函数:正如您在php 文档中看到的,您有 2 种创建构造函数的方法:

1/ __construct() 魔术方法:

class A
{
  public function __construct()
  {

  }
}

2/ 类名本身,不区分大小写:

class A
{
  public function a()
  {

  }
}

你在你的类中创建__constructcheckout方法checkout

在你的情况下:

  class A
  {

     public function __construct()
     {
       echo "ok construct()";   
     }

     public function a()
     {
       echo "ok a()";
     }
  }

 $test = new A();

将输出:

好的构造()

但这是一个非常模棱两可的情况,所以 PHP 会给你这个警告。

于 2012-09-23T05:34:20.677 回答