【发布时间】:2019-05-12 13:31:15
【问题描述】:
我是 OOP PHP 新手。为什么我们必须使用$this 引用,而代码在没有它的情况下也可以工作?
如果我从这个代码片段中同时删除$this(在->sql 之前),那么修改也是有效的。虽然我读过它,但我仍然不明白给定方法中的$this 是什么。
class blogs{
private $servername = "localhost";
private $username = "root";
private $password = "";
private $dbname = "asd";
private $conn = "";
private $result = "";
private $row = "";
private $sql = "";
public function cmd_update(){
$this->sql = "UPDATE
blogs
SET
`name` = '".$_GET['input_name']."',
`date` = '".date('Y-m-d H:m:s')."',
WHERE
id = ".$_GET['input_modifying_id']."
";
if ($this->conn->query($this->sql) === TRUE) {
echo "Successfully modified!";
} else {
echo "Modifying Unsuccessful!";
}
}
【问题讨论】:
-
$this用于引用您所在的类。如果您使用$this->foo = 'bar';,则可以从其他方法访问$this->foo(如果设置为,则从类外部访问)public),而没有$this的变量将是一个局部变量,只能在该特定方法的范围内访问。所以$this->foo和$foo是不同作用域的两个不同变量。 -
$this是该类的当前实例。例如,如果您有多个Blog实例,则每个实例都可以有自己的$this->title,不会干扰 其他Blog实例。 -
通过删除
$this->sql前面的$this,您将把它变成一个私有作用域的变量,该变量不能在类中访问(在cmd_update之外)。通过指定$this->sql,您将其分配给成员变量。 -
旁注:看到您似乎是一个新的编码员,您的代码对 SQL 注入是开放的。最好使用准备好的声明。您不希望您的数据库有一天被破坏或删除。