2

这是 dbconnect.class.php:

<?php  

class Connect 
{ 
    public $error; 
    protected $db; 
    public function __construct() 
    { 
        $link = mysql_connect("localhost","root","1") or $this->error = mysql_error(); 
        $db = mysql_select_db("tarih",$link); 
        $this->db = $db; 
    } 
} 
?>

这是主要的 php 文件:

<?php
//header.class.php 
require_once 'dbconnect.class.php'; 

class Header extends Connect 
{ 
    public $headers = array(); 
    private $baglan; 
    public function __construct() 
    { 
        /* 
        * Bu sınıf sayfaların header bilgilerini işler. 
        */ 
        $baglan = $this->db; 
    } 

    public function sayfaHeader($sayfa = true) 
    { 
        $sql = "SELECT * FROM header WHERE id='" . $sayfa . "'"; 
        $query = mysql_query($sql,$this->baglan); 
    } 


} 

Header::sayfaHeader(); 
?>

当我运行主 php 文件时,我看到此错误:

Fatal error: Using $this when not in object context in C:\AppServ\www\ilk\class\header.class.php on line 19  

第 19 行:

$query = mysql_query($sql,$this->baglan);  

哪里有问题?我看不到问题,因为我很久没有写 php 代码了。

4

4 回答 4

3
Header::sayfaHeader(); 

它调用方法而不创建对象。你必须这样做

Header obj = new Header();
obj->sayfaHeader();

如果要调用类的方法,则将方法声明为static. 但是你不能使用$this引用,因为静态方法和成员没有引用类对象。

更新:
mysql_select_db返回bool值。您必须使用$link变量进行查询。

于 2012-05-02T16:23:20.447 回答
1

您没有数据库问题,

你的代码是错误的。

Header::sayfaHeader(); 

那是针对静态方法的。但是您需要一个实例来实际调用该方法。

尝试:

Header obj = new Header();
obj->sayfaHeader();
于 2012-05-02T16:24:38.180 回答
-1

我认为您需要构造父级来实例化数据库类

public function __construct() 
{ 
    parent::__construct();
    $baglan = $this->db; 
} 
于 2012-05-02T16:45:36.390 回答
-1
public function __construct() 
{ 
    // if you do this, add a $this-> to baglan to acces it in the class
    $this->baglan = $this->db; 
} 

public function sayfaHeader($sayfa = true) 
{ 
    $sql = "SELECT * FROM header WHERE id='" . $sayfa . "'"; 

    // or, since you inherit the $this->db
    $query = mysql_query($sql,$this->db); 
} 
于 2012-05-02T17:03:51.437 回答