我试图弄清楚是否可以在自己的构造函数中实例化一个类,结果发现:
为什么可以在类的定义中实例化它?。
然后我在PHP中尝试了同样的东西:
Class someClass {
function __construct() {
$objNew = new someClass();
$objNew->doit();
}
function doit() {
echo "Do it man!'n";
}
}
$oNew = new someClass();
每次我尝试运行这个程序时,我都会出现"分段故障"错误。。。。。参考上面的代码,甚至上面发布的链接,我想在自己的构造函数中实例化一个类会导致创建无限多的对象(当然,直到服务器崩溃!)。。。。。对上面发生的事情有什么想法吗?为什么在Java中这样做是可以的,而(也许)在PHP中不可以?
这不是一回事。关于为什么可以在类的定义中实例化类的问题?,使用静态方法来实例化他的类。静态方法与类定义(如蓝图)一起存储在堆内存中,不需要实例化。
你可以创建一个静态方法,这个方法必须创建你的类的一个新实例:
Class someClass {
function __construct() {
$this->doit();
}
static function createSomeClass() {
return new someClass();
}
function doit() {
echo "Do it man!'n";
}
}
$oNew = someClass::createSomeClass();
Php不是编译的,而是解释的。编译Java,然后执行。因此,类本身还没有完全定义,您可以在php中再次调用它,所以这会引发一个错误。
以下是适合您的解决方案
<?php
Class someClass {
function __construct() {
$this->doit();
}
function doit() {
echo "Do it man!'n";
}
}
$oNew = new someClass();
?>
如果您只想在对象实例化时调用该方法。那么,做这个$objNew = new someClass();
就没有意义了。它没用。简单地说,这样做:
class someClass {
function __construct() {
$this->doit();
}
function doit() {
echo "Do it man!'n";
}
}
$oNew = new someClass();