类可以实例化另一个类吗? (PHP)
我试过这个,当我尝试在类“second”中实例化类“第一个”时出现错误。类可以实例化另一个类吗? (PHP)
类“second”中的注释部分会导致错误。
class first {
public $a;
function __construct() {
$this->a = 'a';
}
}
class second {
//$fst = new first();
//public showfirst() {
//$firsta = $this->first->a;
// echo "Here is first \$a: " . $firsta;
//}
}
编辑:
这导致即使所有我在课堂上“第二”是类的实例化“第一”服务器错误。
class second {
$fst = new first();
//public showfirsta() {
// $firsta = $this->fst->a;
// echo "Here is first \$a: " . $firsta;
//}
}
试试这个:
class First {
public $a;
public function __construct() {
$this->a = 'a';
}
public function getA() {
return $this->a;
}
}
class Second {
protected $fst;
public function __construct() {
$this->fst = new First();
}
public function showfirst() {
$firsta = $this->fst->getA();
echo "Here is first {$firsta}";
}
}
$test = new Second();
$test->showfirst();
这工作得很好!但是,为什么你要把echo $语句中的$ firsta放在{}里? – 2012-02-13 06:45:13
您可以使用它们来插入变量表达式。但在这种情况下,这也将工作,而不是ofcourse.http://stackoverflow.com/questions/2596837/curly-braces-in-string-in-php – busypeoples 2012-02-13 06:49:02
您可以在另一个类中实例化一个类。就你的情况而言,在你的两个例子中,你总是指向错误的变量。此外,您不能在财产申报指定一个类:
class second {
public $fst;
public function showfirsta() {
$this->fst = new first();
$firsta = $this->fst->a;
echo "Here is first \$a: " . $firsta;
}
}
似乎很奇怪,你不能立即初始化变量到一个实例另一类。但那确实解决了这个问题。而且,这个类实例将会与调用对象一起死掉,对吧? – 2012-02-13 06:38:57
你是什么意思?无论如何,你总是可以返回实例:'return $ this-> fst'。如果将实例化放在构造函数中,那么只要实例化该类,就可以立即分配它;比你将$ this-> fst提供给整个班级 – 2012-02-13 06:47:25
$fst = new first();
不能声明实例化一个新的类功能之外的变量。默认值不可变。它必须是一个字符串,一个数字或一个数组。对象被禁止。
public showfirst() {
你在那里忘了function
这个词。
$firsta = $this->first->a;
您没有声明类变量$first
。您将其命名为$fst
和将将其称为$this->fst
。
echo "Here is first \$a: " . $firsta;
}
你的目的(无论这些均可):
class second {
public function showfirst() {
$fst = new first();
$firsta = $fst->a;
echo "Here is first \$a: " . $firsta;
}
}
在你的例子中,只要函数执行完成,$ fst实例就会死掉,对吗?如果我需要$ fst来完成课程中的其他操作,我该怎么办?是的,你是正确的关于我的错误与“功能”关键字丢失和其他的东西。 – 2012-02-13 06:43:18
那'$ fst'似乎已经唤出无章可循。 – BoltClock 2012-02-13 06:24:05
是的,是吗?我不能创建一个$ fst,它是第一个类的新实例吗?这就是我想要做的。 – 2012-02-13 06:25:41
在实例化另一个类时没有问题,你只需要用正确的变量来引用它,尽管...'$ firsta = $ fst-> a' for ex。 first()的对象被分配给$ fst,而不是$ this-> first – 2012-02-13 06:26:09