What is Fatal error: Uncaught Error: Using $this when not in object context?
What is Fatal error: Uncaught Error: Using $this when not in object context?
我想使用 md5 函数加密 php 中的密码,但出现错误。
Fatal error: Uncaught Error: Using $this when not in object context in ....(line)
这段代码是我从 this link 跟进的,但它是错误的。我试图在 Whosebug 上搜索类似的问题,但没有找到与我相同的情况。这是我的代码。有谁能帮帮我吗?
发现错误的行。 $this->stmt = $this->pdo->prepare($sql);
这是我的代码
<?php
require_once('connect01.php');
function addUser($name, $password){
$hash = md5($password);
$sql = "INSERT INTO `user` (`username`, `pass`) VALUES ('$name','$password')";
$this->stmt = $this->pdo->prepare($sql);
return $this->stmt->execute([$name, $hash]);
}
if(isset($_POST['submit'])){
addUser($_POST['username'], $_POST['pass']);
}
?>
$this
在 class 之外并不是特别有用。 learn about classes 后,您可以返回找到的那个站点。
如果你想使用 addUser()
,你需要一个 class,其中 $pdo
class 属性 是 [=30= 的一个实例]
The previous page showed you a script named database.php
containing the DB
class, a model in the model-view-controller 设计模式。它符合上述要求。
和运行最直接的方法是将DB
class定义添加到脚本中,并将addUser()
的函数定义放在脚本中它。
设置完成后,一旦了解了 inheritance,您可以考虑在脚本中保留 DB
class,但按原样离开,不要 addUsers()
。如果你 extends
它仍然可以使用和添加它:
class User extends DB
{
function addUser($name, $password)
{
$hash = md5($password);
$sql = "INSERT INTO `user` (`username`, `pass`) VALUES ('$name','$password')";
$this->stmt = $this->pdo->prepare($sql);
return $this->stmt->execute([$name, $hash]);
}
}
请记住,如果您选择这种方法,您需要将 DB::$pdo
和 DB::$stmt
从 private
更改为 protected
:
class DB
{
protected $pdo = null;
protected $stmt = null;
/* keep the rest of the class the same */
这是因为 private
class 属性不可用于 ("visible") 扩展第一个 class 的 class,但 protected
class 属性是。这是一个名为 visibility.
的概念的一部分
我想使用 md5 函数加密 php 中的密码,但出现错误。
Fatal error: Uncaught Error: Using $this when not in object context in ....(line)
这段代码是我从 this link 跟进的,但它是错误的。我试图在 Whosebug 上搜索类似的问题,但没有找到与我相同的情况。这是我的代码。有谁能帮帮我吗?
发现错误的行。 $this->stmt = $this->pdo->prepare($sql);
这是我的代码
<?php
require_once('connect01.php');
function addUser($name, $password){
$hash = md5($password);
$sql = "INSERT INTO `user` (`username`, `pass`) VALUES ('$name','$password')";
$this->stmt = $this->pdo->prepare($sql);
return $this->stmt->execute([$name, $hash]);
}
if(isset($_POST['submit'])){
addUser($_POST['username'], $_POST['pass']);
}
?>
$this
在 class 之外并不是特别有用。 learn about classes 后,您可以返回找到的那个站点。
如果你想使用 addUser()
,你需要一个 class,其中 $pdo
class 属性 是 [=30= 的一个实例]
The previous page showed you a script named database.php
containing the DB
class, a model in the model-view-controller 设计模式。它符合上述要求。
和运行最直接的方法是将DB
class定义添加到脚本中,并将addUser()
的函数定义放在脚本中它。
设置完成后,一旦了解了 inheritance,您可以考虑在脚本中保留 DB
class,但按原样离开,不要 addUsers()
。如果你 extends
它仍然可以使用和添加它:
class User extends DB
{
function addUser($name, $password)
{
$hash = md5($password);
$sql = "INSERT INTO `user` (`username`, `pass`) VALUES ('$name','$password')";
$this->stmt = $this->pdo->prepare($sql);
return $this->stmt->execute([$name, $hash]);
}
}
请记住,如果您选择这种方法,您需要将 DB::$pdo
和 DB::$stmt
从 private
更改为 protected
:
class DB
{
protected $pdo = null;
protected $stmt = null;
/* keep the rest of the class the same */
这是因为 private
class 属性不可用于 ("visible") 扩展第一个 class 的 class,但 protected
class 属性是。这是一个名为 visibility.