PHP无法理解冒号:

时间:2014-03-12 18:04:51

标签: php

我尝试运行以下功能

function newPlayer($wallet) {
  generate_: {
    $hash=generateHash(32);
  }
  if (mysql_num_rows(mysql_query("SELECT `id` FROM `players` WHERE `hash`='$hash' LIMIT 1"))!=0) goto generate_;
  $alias='Player_';
  $alias_i=mysql_fetch_array(mysql_query("SELECT `autoalias_increment` AS `data` FROM `system` LIMIT 1"));
  $alias_i=$alias_i['data'];
  mysql_query("UPDATE `system` SET `autoalias_increment`=`autoalias_increment`+1 LIMIT 1");
  mysql_query("INSERT INTO `players` (`hash`,`alias`,`time_last_active`,`server_seed`) VALUES ('$hash','".$alias.$alias_i."',NOW(),'".generateServerSeed()."')");
  header('Location: ./?unique='.$hash.'# Do Not Share This URL!');
  exit();
}

我不确定为什么我的php会把这个意外的错误抛给我:在generate_:{的行 这个功能有什么问题吗?

我试图实现goto generate _;

如何在mysql_num_rows返回0 generateHash(32)

时更正我的代码

2 个答案:

答案 0 :(得分:1)

goto真的不是你应该在这里使用的(或者,基本上,永远)。

最简单的实现只是将该行放在流程中的正确位置,因为您只在一个地方使用它:

if (mysql_num_rows(mysql_query("SELECT `id` FROM `players` WHERE `hash`='$hash' LIMIT 1"))!=0) {
    $hash = generateHash(32);
}

如果你认为你将在很多地方使用它,以后可能会变得更复杂,那么就把它变成它自己的功能:

function generateHashForNewPlayer() {
    return generateHash(32);
}

function newPlayer($wallet) {
    if (mysql_num_rows(mysql_query("SELECT `id` FROM `players` WHERE `hash`='$hash' LIMIT 1"))!=0) {
        $hash = generateHashForNewPlayer();
    }
    // etc

你也许可以用闭包做一些事情,但我无法想象为什么你需要在这里。它看起来像这样:

function newPlayer($wallet) {
    $dynamic_function = function() {
        return generateHash(32);
    }

    if (mysql_num_rows(mysql_query("SELECT `id` FROM `players` WHERE `hash`='$hash' LIMIT 1"))!=0) {
        $hash = $dynamic_function();
    }
    // etc

编辑:再看一下你的代码,我意识到goto这里实际上正在创建一个循环(或者如果它没有被破坏)。因此,您需要做的是将if替换为while

while (mysql_num_rows(mysql_query("SELECT `id` FROM `players` WHERE `hash`='$hash' LIMIT 1"))!=0) {
    $hash = generateHash(32);
}

请参阅the PHP manual entry for while

答案 1 :(得分:0)

好吧,php没有使用:填写变量。你应该使用它;

$generate_ = { $has=generateHas(32); }

会解决您的错误,不确定您的脚本中是什么generate_。 PHP仅使用::来覆盖OOP等中的函数。