我正在尝试创建一个存储名称字符串变量的基本类。问题是setName函数对我来说不正常。我收到了错误:
捕获致命错误:方法TesterClass :: __ toString()必须在第12行的C:\ xampp \ htdocs \ CA18 \ testerPage.php中返回字符串值
我尝试了很多不同的方法,但似乎没有什么可以修复的:代码如下:
<?php
class TesterClass
{
public $name;
public function setName($n)
{
$name = $n;
}
public function __toString()
{
return $this->name;
}
public function __construct()
{
$numArgs = func_num_args();
$args = func_get_args();
if ($numArgs == 0)
{
setName($args[0]);
}
}
}
?>
&#13;
这是类实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Payroll</title>
</head>
<body>
<h1>Payroll</h1>
<?php
require "TesterClass.php";
$myObject = new TesterClass("Philllip");
echo $myObject;
?>
</body>
</html>
&#13;
谢谢!
答案 0 :(得分:0)
在setName()
中,您要将其设置为本地变量$name
,而不是类中的$name
变量...您需要使用$this->name
。你还需要引用$this->setName()
,当你检查args的数量时,你正在寻找有0的时候...当你有超过0时你应该寻找。
class TesterClass
{
public $name;
public function setName($n)
{
$this->name = $n;
}
public function __toString()
{
return $this->name;
}
public function __construct()
{
$numArgs = func_num_args();
$args = func_get_args();
if ($numArgs)
{
$this->setName($args[0]);
}
}
}
答案 1 :(得分:0)
<?php
class TesterClass
{
public $name = ''; // make sure this is a string!
public function setName($n)
{
$this->name = $n;
}
public function __toString()
{
return $this->name;
}
public function __construct()
{
$numArgs = func_num_args();
$args = func_get_args();
if (count($numArgs)) // if there is an arg!
{
$this->setName($args[0]); // class methods are called with $this!
}
}
}
我不知道您使用func_get_args
的原因,但您也可以使用带有默认值的命名参数。
public function __construct($name = '')
{
$this->setName($name);
}
答案 2 :(得分:0)
您的代码是
public function setName($n)
{
$name = $n;
}
但它应该是
public function setName($n)
{
$this->name = $n;
}
在第一个代码中,您将在setName函数中设置名为“name”的本地范围变量。 在最后一段代码中,您将设置名为“name”的对象属性。
此外,您应该检查它是否是有效的字符串值,并且,您的属性应该具有字符串默认值。否则,如果您没有设置名称并尝试获取名称,则可能会收到相同的错误。
答案 3 :(得分:0)
这样做:
public function setName($n)
{
$this->$name = $n;
}
$this
表示该类的任何实例(在您的情况下为$myObject
),而$name
单独是一个新变量。
我认为您的支票也是错误的。
public function __construct()
{
$numArgs = func_num_args();
$args = func_get_args();
if ($numArgs == 0)//This condition says that there are no args passed so it should give an error
{
//no args
}
else $this->setName($args[0]);
}