Php 可捕获致命错误:类作者的对象无法转换为字符串
我在学OOP。我有一个数据库类,作者类和一个问题类。我想要的是将用户输入放到适当的类中,连接到数据库并插入类中的数据Php 可捕获致命错误:类作者的对象无法转换为字符串,php,class,oop,Php,Class,Oop,我在学OOP。我有一个数据库类,作者类和一个问题类。我想要的是将用户输入放到适当的类中,连接到数据库并插入类中的数据 // ask.php $pdo = new DbConnect('host', 'dbname', 'username', 'password'); // Create an Author object try { $author = new Author($first_name, $last_name); } cat
// ask.php
$pdo = new DbConnect('host', 'dbname', 'username', 'password');
// Create an Author object
try {
$author = new Author($first_name, $last_name);
} catch (Exception $e) {
echo $e->getMessage();
}
// Question object
try {
$question = new Question($author, $author_question);
} catch (Exception $e) {
echo $e->getMessage(), '<br>';
}
// Insert the user input into the database
$pdo->execute_query('INSERT INTO author (first_name, last_name) VALUES (?, ?)', array($author->getFirstName(), $author->getLastName()));
$pdo->execute_query('INSERT INTO question (author, question) VALUES (?, ?)', array($question->getAuthor(), $question->getQuestion()));
$pdo->close_connection();
// class.dbconnect.php
public function execute_query($sql, array $data = null)
{
$this->stmt = $this->conn->prepare($sql);
if (!$this->stmt->execute($data)) {
throw new Exception('Error with your query.');
}
}
// class.question.php
class Question
{
private $author;
private $question;
public function __construct(Author $author, $question)
{
$this->author = $author;
$this->question = $question;
}
public function getAuthor()
{
return $this->author;
}
public function getQuestion()
{
return ucfirst($this->question);
}
}
//ask.php
$pdo=new DbConnect('host','dbname','username','password');
//创建一个Author对象
试一试{
$author=新作者($first\u name,$last\u name);
}捕获(例外$e){
echo$e->getMessage();
}
//问题对象
试一试{
$question=新问题($author,$author\u question);
}捕获(例外$e){
echo$e->getMessage(),“
”;
}
//将用户输入插入数据库
$pdo->execute_query('插入到author(first_name,last_name)值(?,)',数组($author->getFirstName(),$author->getLastName());
$pdo->execute_query('INSERT-INTO-question(author,question)值(?,)',数组($question->getAuthor(),$question->getQuestion());
$pdo->关闭_连接();
//class.dbconnect.php
公共函数执行查询($sql,数组$data=null)
{
$this->stmt=$this->conn->prepare($sql);
如果(!$this->stmt->execute($data)){
抛出新异常('查询出错');
}
}
//class.question.php
课堂提问
{
私人作家;
私人问题;
公共函数构造(Author$Author$question)
{
$this->author=$author;
$this->question=$question;
}
公共函数getAuthor()
{
返回$this->author;
}
公共函数getQuestion()
{
首先返回($this->question);
}
}
虽然没有显示这些类,但我的猜测是:
$question = new Question($author, $author_question);
问题
类构造函数使用$author a字符串
,这是第一个参数,您试图传递整个对象。根据您的逻辑/内部功能,您可以通过传递作者的id/姓名或将该参数用作Question
类中的对象来修复此问题
**更新**
现在这些类都可用了,在查询中调用$question->getAuthor()
,它返回一个对象,而不是作者姓名或id
您可以将Author
类修复为:
public function getAuthor()
{
return $this->author->getFirstName() . " " . $this->author->getLastName() // to return author's full name as a string!
}
或类似的函数,以便根据您的逻辑将值设置为和整数或字符串。我会使用作者的自动递增ID,因为您实际上是在尝试创建两个对象之间的关系。您的问题是,当您调用
$question->getAuthor
时,它返回的是一个对象,而不是字符串:
public function __construct(Author $author, $question)
{
$this->author = $author; // this is an object
$this->question = $question;
}
public function getAuthor()
{
return $this->author; // this is an object
}
在数据库查询中使用
$question->getAuthor()
时,需要返回一个字符串。我建议您添加某种类型的getAuthorName
方法来提问,或者返回author对象,然后调用$author->getFirstName
和$author->getLastName
,以获取您需要的作者姓名格式。错误在哪里?你也可以发布你的类的精简版本吗?@我警告外星人错误发生在我在class.dbconnect.php中创建的insert查询方法中。什么是$question->getAuthor()
do?我猜它会返回一个Author
对象,而不是字符串。你是对的。我不能把它插入数据库?我在帖子中包含了来自question类的代码。不——你不能像那样将对象放入db查询中。除此之外,如何将对象表示为文本字符串?!?!PHP不知道,数据库不知道,我不知道……在问题构造函数中,我指定了第一个参数来接受author对象。我更新了我的帖子,并加入了问题类。“返回$this->author->$author->getFirstName()”那个$author在那里,有必要吗?不,这是一个打字错误,这样不行。现在修复了,但是你明白了,当你需要将对象作为字符串传递而不是传递对象时,你应该得到对象的一些属性。好的,我接受了你的答案,谢谢。好奇的是,你有没有其他方法将对象转换成字符串?(字符串)不起作用。_uuu-toString()如何,在这种情况下适用吗?确切地说,使用uuu-toString()
时,无论何时尝试回送或将对象强制转换为字符串
,都将返回对象字符串
表示,而不是实际对象。