2015-02-07 2 views
0

는 지금 문자열이 클래스가 (유형 힌트를 그리고 재미 때문에) : 무한 재귀

/** 
* 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와 아파치)이 실행 재설정되어이 다음과 같을 것이다?

+0

하는 데 도움이

Holps 코드에는 type hinting이 없습니다. bash로부터 메모리 에러가 나오고 PHP가 139로 끝날 때까지는 정상적으로 작동합니다. – jankal

+0

PHP가 왜 이런 에러를 catch하지 않는지 궁금합니다 ... – jankal

+0

실제로'xdebug.max_nesting_level'은 깊이입니다 당신이 예외를 얻은 후에. 그러나 다시 .... 왜? 이 코드는 쓰레기 다 : D 죄송합니다. – Aitch

답변

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); 

시도 할 수 있습니다하지만 난 여기 데 도움이 일을 해달라고 무한 rekusive

입니다.

왜 처음에 할 당신은 new self()

는 PHP에서 클래스의 단일 인스턴스가 의미하는 조회 무엇인지 확인하십시오. 그게 유일한 needfull 방법은 당신이 new self() PHP에있어.

가와

class A { 
    function typeHintingFunction(string $sting){ 

    } 
} 

explode($this->string); 미스 한 인수 내가 지금 아파치없이 검사를하지 조금

+0

나는 싱글 톤을 알고 있고 그들을 사용하고 있습니다. 하지만 클래스의 무한 재귀를 만드는 것과 같은 이상한 일을하는 것은 재미 있다는 것을 알았습니다. 제가 작업하고있는 전체 파일에는 1200 라인이 넘습니다. 다른 클래스에서 hintig 형식을 사용하고 싶습니다. 'explode ($ this-> string);'는 보통 $ this-> string = $ string;을 사용했을 때만 작동합니다. 왜냐하면'explode();'는 문자열에서 배열을 만듭니다. – jankal

+0

** 클래스에 무한 반복 호출 ** 죄송합니다. 이해 못하겠습니까? splitt –

+0

깊이가 무한대에 그 자체로있는 ​​클래스입니다. 보다 나은? – jankal