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()
什么都没发生。我做错了什么?
答案 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是最灵活的,因为您每次都可以更改名字和姓氏的值。