无法从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
有在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);
工程就像一见钟情,非常感谢!这个脚本似乎在JS原创中有些微纠结(例如重复标点符号似乎出现),但我会解决这些问题。 –
是的,我想这是因为'标点符号'数组的计算。我把它等同于array(1);'但这可能是不正确的。 – Rasclatt
更改你的字符串从+=
追加到.=
谢谢,是的,我现在这样做了。无论如何,例如。 'code'“echo $ mugenzaru-> doIt;''code'会抛出一个错误:”PHP Catchable致命错误:类Closure的对象无法转换为字符串“ –
我不太确定,但也许你可以改变这个“echo $ mugenzaru-> doIt;” “echo $ mugenzaru-> doIt();” –
我试过了,结果:'PHP致命错误:调用未定义的方法Object :: doIt()' –
注:代码必须张贴并包含在你的问题 – Ghost
我想如果将函数移动到类中,您将获得更多成功。 – Rasclatt
@Ghost 根据Rasclatt的说法,我似乎不能包含代码bc它包含触发垃圾邮件警报的日文字符。 –