PHP中带有new self()的无限递归


Infinite recursion in PHP with new self()

我现在有了这个字符串类(键入hinting,因为它很有趣):

/**
 * A String class for string type hinting in functions
 */
class string {
    /**
     * The value
     * @var string
     */
    public $string;
    /**
     * makes a string out of a string... georgous..
     * @param string $string
     */
    public function __construct($string) {
        if(!is_string($string)):
            return false;
        endif;
        $this->string = new self($string);
    }
    /**
     * magic toString method ;)
     * @return string
     */
    public function __toString() {
        return $this->string;
    }
    /**
     * Serializer
     * @return array
     */
    public function __sleep() {
        return ['string'];
    }
    /**
     * array maker
     * @return array
     */
    public function toArray() {
        return [$this->string];
    }
    /**
     * split a string
     * @return string[]
     */
    public function splitstr() {
        return explode("", $this->string);
    }
}

当我做$this->string = new self($string);时,PHP应该创建一个永不终止的递归弹药数。这看起来像:

new string("test) {
    $string = new string("test") {
        $string = new string("test") {
            $string = new string("test") ... AND SO ON FOREVER
        }
    }
}

现在我的问题是:为什么PHP在执行此操作时会重置网络连接(PHP和Apache2)?

/**
 * makes a string out of a string... georgous..
 * @param string $string
 */
public function __construct($string) {
    if(!is_string($string)):
        return false;
    endif;
    $this->string = new self($string);
}

是无限重燃

你可以试试

 !self::$string AND self::$string = new self($string);

但我不认为这有什么帮助。

为什么首先要制作new self()

查找PHP中类的单个实例的含义。这是在php中使用new self()的唯一必要方法。

并且在您的代码中没有type hinting

class A {
   function typeHintingFunction(string $sting){
   }
}

explode($this->string);错过一个参数

有助于的Holps