【发布时间】:2017-03-02 20:03:40
【问题描述】:
我是 php 新手,最近遇到了一些错误。请在下面查看我的代码。
我收到一些错误提示 在对象上下文之外使用 $this。
这是 index.php
<?php
require_once ('setting.php');
try{
$sql = "CREATE TABLE users (
user_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
account VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL,
)";
$result = $this->db->getConnection()->execute($sql);
}catch(Exception $e){
echo " " . $e->message();
}
?>
我将这个设置命名为.php
<?php
abstract class PDORepository{
const USERNAME="xxxx";
const PASSWORD="";
const HOST="xxxxxx";
const DB="xxxxx";
private function getConnection(){
$username = self::USERNAME;
$password = self::PASSWORD;
$host = self::HOST;
$db = self::DB;
$connection = new PDO("mysql:dbname=$db;host=$host", $username, $password);
return $connection;
}
protected function queryList($sql, $args){
$connection = $this->getConnection();
$stmt = $connection->prepare($sql);
$stmt->execute($args);
return $stmt;
}
}
?>
我应该怎么做才能访问该类 PDORepository。我在这里找到了一些关于使用抽象类的讨论。但它与此不相似。谢谢您的帮助!新手来了!
【问题讨论】:
-
我真的不明白为什么这个类是抽象的。此外,Your first database wrapper's childhood diseases
-
^.其他 notes
$this指的是您当前所在的对象。在 index.php 中,您不在对象上下文中,因此未定义 $this。抽象类被用作创建基类的一种方式,该基类应该被扩展以完成类中预期的功能。看来您的课程应该是普通(或最终)课程。然后你需要用$db = new PDORepository;实例化它。然后,您将遇到一些问题,因为 getConnection 方法是私有的(只能在对象内访问)。我建议从更简单的开始并经常测试代码。 -
总的来说,这段代码只是一堆运算符,随意拼凑在一起。让我建议你用香草 PDO 练习一段时间。它将为您省去很多麻烦。仅作记录:$this 的问题不是这里唯一的问题