使用new self()在PHP中进行无限递归

时间:2015-02-07 21:22:53

标签: php class oop recursion

我现在有这个类的字符串(类型提示,因为它很有趣):

/**
 * 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)?

1 个答案:

答案 0 :(得分:1)

/**
 * 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);错过了一个参数

霍尔斯帮助了一点