PHP类没有回复返回值

时间:2009-03-01 03:21:53

标签: php oop

class hello {

  var $fname;
  var $lname;

  function attrib() {
    $this->fname = "sarmen";
    $this->lname = "dijango";
  }

  function say() {
    $name = $this->fname.", ".$this->lname;
    return $name;
  }
}

当我在页面上包含类并输入类似这样的内容时,这是我的示例类

$d = new hello();
$d->say()

什么都没发生。我做错了什么?

5 个答案:

答案 0 :(得分:7)

您将方法attrib视为constructor,但您需要将其命名为__construct,以使其表现得如此。*否则,你需要这样做:

$myobject = new hello(); // create new object
$myobject->attrib(); // set the vars
print $myobject->say();

然而,更常见的是看到这样的事情:

$myobject = new hello('my first name', 'my last name');
print $myobject->say();

然后代替attrib方法,你会看到像这样的东西:

function __construct($fname, $lname) {
   $this->fname = $fname;
   $this->lname = $lname;
}

*除非您使用PHP4,否则您需要将构造函数命名为与类名相同。

答案 1 :(得分:4)

“说”返回一个字符串。你实际上并没有做任何事情。你不应该打印它或什么?

答案 2 :(得分:4)

试试这个:

$d = new hello();
$d->attrib();
print $d->say();

除此之外,您可以进行一些改进,例如:

class hello {

   var $fname; 
   var $lname;

   public function __construct() {

      $this->fname = "sarmen"; 
      $this->lname = "dijango";

   }

  public function say() {

      $name = $this->fname.", ".$this->lname;

      return $name;

   }
}

答案 3 :(得分:1)

试着去:

$var=$d->say();
echo $var;

答案 4 :(得分:1)

如果你打电话,他们现在就拥有它:

$d = new hello(); 
$d->say();

没有任何反应,因为say()只返回值...您需要回显或打印该值,如下所示:

$d = new hello();
echo $d->say();

但是这只会输出你分配给$ name的逗号。 $ this-> fname和$ this-> lname的值尚未填充,因此无法返回。

但是等等,你可能会说......我有那个方法attrib(),那不应该填充那些变量吗?答案是肯定的,但你必须打电话给它。因此,使用您的示例,以下内容可以满足您的需求:

$d = new hello(); //instantiates the class
$d->attrib();     //calls attrib() thus assigning those values
echo $d->say();   //echos out the values returned by say()
然而,最重要的是,事实上这并不是做这样事情的最佳方式。 Paolo和jonstjohn提供的答案向您展示了处理此问题的最佳方法,Paolo是最灵活的,因为您每次都可以更改名字和姓氏的值。