PHP类setName函数

时间:2014-10-22 16:55:32

标签: php

我正在尝试创建一个存储名称字符串变量的基本类。问题是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;
&#13;
&#13;

这是类实现:

&#13;
&#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;
&#13;
&#13;

谢谢!

4 个答案:

答案 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]);
            }