2016-10-04 166 views
-2

我使用在線轉換器將http://7xl.org/_msg/mugenzaru的Javascript *轉換爲PHP。代碼是有效的,但我不知道如何使$ mugenzaru-> doIt函數返回變量$ resultString。有任何想法嗎?無法從PHP類函數獲取返回值

  • 一個ЈapanеseⅬоremІpsumgеnerator

原始的Javascript:http://7xl.org/_msg/mugenzaru/js.htm

產生,稍微適應PHP:http://7xl.org/_msg/mugenzaru/php.htm

+1

注:代碼必須張貼幷包含在你的問題 – Ghost

+0

我想如果將函數移動到類中,您將獲得更多成功。 – Rasclatt

+0

@Ghost 根據Rasclatt的說法,我似乎不能包含代碼bc它包含觸發垃圾郵件警報的日文字符。 –

回答

1

有在ho中存在差異w「等效」的php函數可以工作,所以這裏有問題,具體是pickOne()的計算。 Math.random()random()的作用不一樣,所以編號就沒有了。看看這是否讓你更接近。一個說明,日本字符造成如此認爲它的垃圾郵件,所以我離開了這些出來,但他們確實需要在這些數組來填充:

class Characters 
    { 
     private $mugenzaru; 

     public function getString(Mugenzaru $mugenzaru,$charType = 'kangi') 
      { 
       $this->mugenzaru = $mugenzaru; 
       $kanji    = array(2, 2, 2, 2, 2, 2, 1, 1, 1, 3, 3, 4); 
       $hiragana   = array(1, 1, 1, 1, 2, 2, 2, 3, 3, 4); 
       $katakana   = array(2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6, 7); 
       $punctuation  = array(1); 
       $lengthWeighting = ${$charType}; 
       $charStringLength = $this->mugenzaru->eenieMeenie()->pickOne($lengthWeighting); 
       $resultString  = ""; 
       while ($charStringLength != 0) { 
        $resultString .= $this->mugenzaru->eenieMeenie()->pickOne($this->mugenzaru->{$charType}()); 
        $charStringLength--; 
       } 
       return $resultString; 
      } 
    } 

class EenieMeenie 
    { 
     public function pickOne($characterList) 
      { 
       $rand = "0.".str_pad(mt_rand(1,9999999999999999),16,0,STR_PAD_LEFT); 
       $var = floor($rand*count($characterList)); 
       return $characterList[$var]; 
      } 
    } 

class Mugenzaru 
    { 
     private $length = 10; 

     public function eenieMeenie() 
      { 
       return new EenieMeenie(); 
      } 

     public function __call($name, $args = false) 
      { 
       $kanji  = array(/*** array of kanji ***/); 
       $hiragana = array(/*** array of hiragana ***/); 
       $katakana = array(/*** array of katakana ***/); 
       $punctuation = array(/*** array of punctuation ***/); 

       return ${$name}; 
      } 

     public function setLength($num = 1000) 
      { 
       $this->length = $num; 
       return $this; 
      } 

     public function doIt(Characters $char) { 
       $weighting = array(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 4, 4); 
       $resultString = ""; 
       $targetLength = $this->length; 

       while(strlen($resultString) < $targetLength) { 
        $charWeight = $this->eenieMeenie()->pickOne($weighting); 
        switch ($charWeight){ 
         case 1: 
          $resultString .= $char->getString($this,'kanji'); 
          break; 
         case 2: 
          $resultString .= $char->getString($this,'hiragana'); 
          break; 
         case 3: 
          $resultString .= $char->getString($this,'katakana'); 
          break; 
         case 4: 
          $resultString .= $char->getString($this,'punctuation'); 
          break; 
         default: 
          $resultString .= $char->getString($this,'kanji'); 
        } 
       } 

       return $resultString; 
      } 
    } 


$Mugenzaru = new Mugenzaru(); 
echo $Mugenzaru->setLength(1000)->doIt(new Characters); 
+0

工程就像一見鍾情,非常感謝!這個腳本似乎在JS原創中有些微糾結(例如重複標點符號似乎出現),但我會解決這些問題。 –

+0

是的,我想這是因爲'標點符號'數組的計算。我把它等同於array(1);'但這可能是不正確的。 – Rasclatt

1

更改你的字符串從+=追加到.=

+0

謝謝,是的,我現在這樣做了。無論如何,例如。 'code'「echo $ mugenzaru-> doIt;''code'會拋出一個錯誤:」PHP Catchable致命錯誤:類Closure的對象無法轉換爲字符串「 –

+0

我不太確定,但也許你可以改變這個「echo $ mugenzaru-> doIt;」 「echo $ mugenzaru-> doIt();」 –

+0

我試過了,結果:'PHP致命錯誤:調用未定義的方法Object :: doIt()' –