Обходной путь для не может переопределить? - PullRequest
2 голосов
/ 14 февраля 2012

Я только что закончил работу этого скрипта, и мне нужно использовать его несколько раз на одной странице.Однако, когда я использую его во второй раз, я получаю сообщение об ошибке Fatal error: Невозможно повторно объявить get_names () (ранее объявлено. Я искал ответ, но все, что я мог найти, - это использовать команду Once, но, похоже, она не работаетс get. Вот скрипт:

<?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;

}?>

Ответы [ 4 ]

2 голосов
/ 14 февраля 2012

Это уродливый хак, но вы можете поместить это вокруг функции:

if ( !function_exists("get_names") ) {

/// the function

}

Конечно, лучший способ - это include_once("includefile.php");, где includefile.php содержит соответствующую функцию (примечание: includefile.php также нужны открывающие и закрывающие <?php ?> теги).

2 голосов
/ 14 февраля 2012

Вы можете заключить функцию в if(!function_exists('get_names')) или использовать include_once или require_once для включения файла вместо include или исправить свой вызывающий скрипт, чтобы он не включался дважды (или более).

1 голос
/ 14 февраля 2012

Поместите определение функции в свой собственный файл и вызовите include (или require) один раз в верхней части страницы этого файла.

get_names определяется несколько раз, поэтому во второй раз возникает фатальная ошибка.

EDIT:

Единственная часть, которой нужно , чтобы быть в своем собственном файле, это определение функции:

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') it, вы сможете запускать остальную часть этого кода несколько раз. .

0 голосов
/ 14 февраля 2012

Вы можете попробовать:

<?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;
}
...