无法从PHP类函数获取返回值

问题描述:

我使用在线转换器将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它包含触发垃圾邮件警报的日文字符。 –

有在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

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

+0

谢谢,是的,我现在这样做了。无论如何,例如。 'code'“echo $ mugenzaru-> doIt;''code'会抛出一个错误:”PHP Catchable致命错误:类Closure的对象无法转换为字符串“ –

+0

我不太确定,但也许你可以改变这个“echo $ mugenzaru-> doIt;” “echo $ mugenzaru-> doIt();” –

+0

我试过了,结果:'PHP致命错误:调用未定义的方法Object :: doIt()' –