【问题标题】:PHP. Fatal error: Using $this when not in object contextphp。致命错误:不在对象上下文中使用 $this
【发布时间】:2014-03-28 17:40:20
【问题描述】:

我有问题

我是 PDO 的新手,所以我试图从表中获取所有数据,我知道这很容易,但是 $this 变量给我带来了一些问题,我编写了一个名为 DB 的类来连接到 mysql,并且我在另一个名为 getAll 的类中使用它,并带有一个名为 get 的函数;

数据库类

<?php 
class DB
{
    private $_dbh;
    private static $_instance;
    private function __construct()
    {
        try 
        {
            $this->_dbh = new PDO("mysql:host=127.0.0.1;dbname=telmex","root","a.d.s.l");                   
        } 
        catch (PDOException $e) 
        {
            die($e->getMessage());  
        }
    }

    public static function Link()
    {
        if(!isset(self::$_instance))
        {
            self::$_instance = new DB();
        }

        return self::$_instance;    
    }
}

?>

getAll 类

<?php 

class getAll
{
    public $_dbh;
    public function __construct()
    {
        $this->_dbh=DB::Link();
    }

    public static function get($tabla)
    {
        $sql="SELECT * FROM ".$tabla."";
        if($sentencia=$this->_dbh->prepare($sql))
        {
            echo "Prepared.";
        }   
    }
} ?>

所以当我运行时

<?php 
$select = new getAll();
    $consultar = $select->get("users");
 ?>

它给了我一个致命的错误。

【问题讨论】:

  • 从public static function get($tabla) 的定义中删除static,因为您不是静态调用它,而是将其视为实例方法
  • Fatal Error For $this variable 的可能重复项
  • 仍然报同样的错误

标签: php fatal-error


【解决方案1】:

从 getAll 类 public $_dbh 中删除这一行;并使其扩展 DB 类

【讨论】:

  • 除非您也进行一些其他更改,否则不会有有效的数据库连接
  • 你能从 apache 日志中准确地写出问题是什么吗?
  • 致命错误:在第 14 行的 /var/www/html/PDO/Clases/getAll.php 中不在对象上下文中时使用 $this
  • 从 getAll 类 public $_dbh 中删除这一行;并使其扩展 DB 类
【解决方案2】:
<?php 
class getAll extends DB {
    public function __construct()
    {
       parent::__construct();
    }
    public static function get($tabla)
    {
        $sql="SELECT * FROM ".$tabla."";
        if($sentencia=$this->_dbh->prepare($sql))
        {
            echo "Prepared.";
        }   
    } 
 }
getAll::get('users');
 ?>

【讨论】:

    【解决方案3】:

    数据库类

    <?php 
    class DB
    {
        var $_dbh;
        private static $_instance;
        private function __construct()
        {
            try 
            {
                $this->_dbh = new PDO("mysql:host=127.0.0.1;dbname=telmex","root","a.d.s.l");                   
            } 
            catch (PDOException $e) 
            {
                die($e->getMessage());  
            }
        }
        function get_dbh(){
            return $this->_dbh;  
        }
        public static function Link()
        {
            if(!isset(self::$_instance))
            {
                self::$_instance = new DB();
            }
    
            return self::$_instance;    
        }
    }
    ?>
    

    getAll 类

    <?php 
    
    class getAll
    {
        public $_dbh;
        public function __construct()
        {
            $con = DB::Link();
            $this->_dbh= $con->get_dbh();
        }
    
        public static function get($tabla)
        {
            $sql="SELECT * FROM ".$tabla."";
            if($sentencia=$this->_dbh->prepare($sql))
            {
                echo "Prepared.";
            }   
        }
    } ?>
    

    【讨论】:

      猜你喜欢
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      相关资源
      最近更新 更多