在其自己的类中实例化对象

时间:2015-02-26 05:00:01

标签: php

我试图弄清楚我是否可以在自己的构造函数中实例化一个类,然后我遇到了这个:

Why Can You Instantiate a Class within its Definition?

然后我在PHP中尝试了同样的事情:

Class someClass {
 function __construct() {
  $objNew = new someClass();
  $objNew->doit();
 }

  function doit() {
   echo "Do it man!\n";
  }
}

$oNew = new someClass();

每次我试图运行它时都会出现“分段错误”错误..... 参考上面的代码甚至上面发布的链接,我想认为在自己的构造函数中实例化一个类会导致无限数量的对象被创建(当然,直到服务器崩溃!).....关于上面发生了什么的任何想法?为什么可以在Java中执行此操作并且(可能)不在PHP中执行此操作?

4 个答案:

答案 0 :(得分:1)

这不是一回事。在问题Why Can You Instantiate a Class within its Definition?上,使用 static 方法来实例化他的类。静态方法与堆内存中的类定义(如蓝图)一起存储,不需要实例化。

你可以创建一个静态方法,这个方法必须创建一个新的类实例:

Class someClass {
  function __construct() {
    $this->doit();
  }

  static function createSomeClass() {
    return new someClass();
  } 

  function doit() {
    echo "Do it man!\n";
  }
}

$oNew = someClass::createSomeClass();

答案 1 :(得分:1)

Php未编译但已解释。编译Java并在此之后执行。所以类本身还没有全部定义,你在php中再次调用它,所以这会引发错误。

答案 2 :(得分:0)

如果你要做的就是在实例化对象时调用该方法。然后,没有意义这样做$objNew = new someClass();。这毫无用处。简单地说,这样做:

Class someClass {
 function __construct() {
  $this->doit();
 }

  function doit() {
   echo "Do it man!\n";
  }
}

$oNew = new someClass();

答案 3 :(得分:0)

以下是适合您的解决方案

<?php
Class someClass {
 function __construct() {
  $this->doit();
 }

  function doit() {
   echo "Do it man!\n";
  }
}

$oNew = new someClass();
?>