解决方法无法重新声明?

问题描述:

我刚刚完成了这个脚本的工作,我需要在同一页面中多次使用它。但是,当我第二次使用它时,我得到了错误致命错误:无法重新声明get_names()(之前声明过)。我环顾四周寻找答案,但我能找到的所有东西都是使用once命令,但似乎不起作用与到达这里是脚本:?解决方法无法重新声明?

<?php 
$db = mysql_connect('localhost', 'username', 'pass') or die("Database error"); 
mysql_select_db('dbname', $db); 

$query = "SELECT pool FROM winners"; 
$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)) 
if ($row['pool'] % 2) { 
    echo "<h4>Result 1</h4>"; 
    $names = get_names(1); 
    foreach($names as $name) { 
     echo $name . "<br/>"; 
    } 
} else { 
    echo "<h4>Result 2</h4>"; 
    $names = get_names(0); 
    foreach($names as $name) { 
     echo $name . "<br/>"; 
    } 
} 

function get_names($pool_result) 
{ 
$name_array = array(); 

$query = "SELECT * FROM comments WHERE commentid % 2 = $pool_result"; 
$result = mysql_query($query); 

while ($row = mysql_fetch_array($result)) { 
    array_push($name_array, $row['name']); 
} 

return $name_array; 

} >

把函数定义成在该文件的页面顶部它自己的文件,并调用包括(或需要)一次

get_names正在被定义不止一次,所以第二次上升一个致命的错误。

编辑:

的唯一部分需求是在它自己的文件函数定义:

function get_names($pool_result) 
{ 
    $name_array = array(); 

    $query = "SELECT * FROM comments WHERE commentid % 2 = $pool_result"; 
    $result = mysql_query($query); 

    while ($row = mysql_fetch_array($result)) 
     array_push($name_array, $row['name']); 

    return $name_array; 
} 

虽然我和肯定其他人会主张码的进一步组织,如果你把这个函数放在一个像library.php之类的文件中,然后require_once('path/to/library.php')它,你应该可以多次运行它的其余部分。

+0

我只是尝试这样做,我仍然得到同样的错误。需要将哪些部分放入我正在使用include_once的php文件中? – user1206214 2012-02-14 03:40:39

+0

我在那里扔了一些代码,看看它是否有帮助。 – quickshiftin 2012-02-14 04:46:37

这是一个丑陋的黑客攻击,但你可以把这个周围的功能:

if (!function_exists("get_names")) { 

/// the function 

} 

当然,更好的办法是include_once("includefile.php");,与includefile.php包含在问题(注意函数:includefile.php也需要开启和关闭<?php ?>标签)。

+0

我只是试过这个,我仍然得到相同的错误。需要将哪些部分放入我正在使用include_once的php文件中? – user1206214 2012-02-14 03:41:14

+0

'function get_names($ pool_result){...}'部分。或者你可以把这个函数放在显然包含脚本的文件中多次。 – mvds 2012-02-14 10:23:21

你可以用功能在if(!function_exists('get_names')),或使用include_oncerequire_once包含的文件,而不是include或解决您调用脚本不包括两次(或更多)。

你可以尝试:

<?php 
$db = mysql_connect('localhost', 'username', 'pass') or die("Database error"); 
mysql_select_db('dbname', $db); 

$query = "SELECT pool FROM winners"; 
$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)) 
if ($row['pool'] % 2) { 
    echo "<h4>Result 1</h4>"; 
    $names = get_names(1); 
    foreach($names as $name) { 
     echo $name . "<br/>"; 
    } 
} else { 
    echo "<h4>Result 2</h4>"; 
    $names = get_names(0); 
    foreach($names as $name) { 
     echo $name . "<br/>"; 
    } 
} 
if(!function_exists("get_names")) { 

    function get_names($pool_result) 
    { 
    $name_array = array(); 

    $query = "SELECT * FROM comments WHERE commentid % 2 = $pool_result"; 
    $result = mysql_query($query); 

    while ($row = mysql_fetch_array($result)) { 
     array_push($name_array, $row['name']); 
    } 

    return $name_array; 
} 
+0

我刚试过这个,它仍然给我同样的错误 – user1206214 2012-02-14 02:12:28