调用未定义的函数错误,甚至定义了函数

时间:2012-10-23 05:14:32

标签: php runtime-error

我有一个会话安全的文件“admin.php”。这是登录后的默认页面。 这引发了以下错误:

  

致命错误:在第14行的C:\ xampp \ htdocs \ cd-website \ cms \ admin.php中调用未定义的函数listPages()

<?php
/*
* initialize session for admin
*/
session_start();

if(isset($_SESSION['admin_user']))
{
    require_once '../cms/config.php';

    $action = isset($_POST['action']) ? $_POST['action'] : '';

    if ($action == null)
    {
        listPages();
        exit;
    }

    /*
     * using switch for choosing function
     */
    switch($action)
    {
        case 'ManagePages':
            ManagePages();
            break;
        case 'listUsers':
            listUsers();
            break;
        case 'orderList':
            listOrders();
            break;
        case 'listBanner':
            listBanners();
            break;
        case 'NewsletterUser':
            NewsletterUsers();
            break;
        case 'Newsletter':
            Newsletter();
            break;
        case 'listQuestion':
            listquestions();
            break;
        case 'testinomial':
            listTesti();
            break;
        default:
            listPages();
    }

    /*
     * different function for different tasks
     */
    function ManagePages()
    {
        listPages();
    }

    function listUsers()
    {
        // include listusers.php here. required rows is in listusers.php file
    }

    function listOrders()
    {
        // include listorders.php here
    }

    function  listBanners()
    {
        // include listbanners.php here
    }

    function  NewsletterUsers()
    {
        // include listNUsers.php here
    }

    function listquestions()
    {
        // include listquestions.php here.
    }

    function listTesti()
    {
        // include listTesti.php here.
    }

    function Newsletter()
    {
        //  include newsletter.php
    }

    function listPages()
    {
        //  include listPages.php here
    }
}
else
{
    header("Location:index.php");
}

当我尝试解决第14行的错误时,它会在listPages()存在的每一行显示错误。

为什么会这样?请帮忙!

5 个答案:

答案 0 :(得分:8)

您在if块中声明了一个函数,这可能很棘手。根据{{​​3}},http://www.php.net/manual/en/functions.user-defined.php,它们在执行到达函数定义之前将不可用,但如果将函数放在外部,则序列无关紧要,并且该函数在整个脚本中都可用

<?php
bar(); // OK
function bar()
{
  echo "I exist immediately upon program start.\n";
}

if (TRUE) {
  foo(); // Fails because `foo` isn't defined yet.
  function foo()
  {
    echo "I don't exist until program execution reaches me.\n";
  }
}

请查看conditional functions

所以解决方案是在if块之外声明函数,或者将它们放在你使用它的位置之上(如果它真的需要驻留在if块中)。

答案 1 :(得分:0)

这里有两个解决方案,其中一个是使用Class,上面的方法  如果您使用上述方法,则应在调用该函数之前定义该函数。

所以

function listPages()
   {
                              //include listPages.php here
   }

after that call listPages()

答案 2 :(得分:0)

我对php并不是特别熟悉,但看起来你只是在那里的大if块中定义你的函数。你可能正在遇到php处理范围的方式。

尝试将您的函数定义放在if块之外,看看会发生什么?

答案 3 :(得分:0)

<?php
/*
* initialize session for admin
*/
session_start();

if(isset($_SESSION['admin_user']))
{
    require_once '../cms/config.php';

    $action = isset($_POST['action']) ? $_POST['action'] : '';

    if ($action == null)
    {
        listPages();
        exit;
    }


    /*Functions */
    function ManagePages()
    {
        listPages();
    }

    function listUsers()
    {
        // include listusers.php here. required rows is in listusers.php file
    }

    function listOrders()
    {
        // include listorders.php here
    }

    function  listBanners()
    {
        // include listbanners.php here
    }

    function  NewsletterUsers()
    {
        // include listNUsers.php here
    }

    function listquestions()
    {
        // include listquestions.php here.
    }

    function listTesti()
    {
        // include listTesti.php here.
    }

    function Newsletter()
    {
        //  include newsletter.php
    }

    function listPages()
    {
        //  include listPages.php here
    }


    /*
     * using switch for choosing function
     */
    switch($action)
    {
        case 'ManagePages':
            ManagePages();
            break;
        case 'listUsers':
            listUsers();
            break;
        case 'orderList':
            listOrders();
            break;
        case 'listBanner':
            listBanners();
            break;
        case 'NewsletterUser':
            NewsletterUsers();
            break;
        case 'Newsletter':
            Newsletter();
            break;
        case 'listQuestion':
            listquestions();
            break;
        case 'testinomial':
            listTesti();
            break;
        default:
            listPages();
    }

    /*
     * different function for different tasks
     */

}
else
{
    header("Location:index.php");
}

答案 4 :(得分:0)

在通话前检查您的功能是否已设定。在PHP中,您必须在调用函数之前声明函数。

您的错误清楚地告诉您,当您致电listPages()时,此功能尚不存在。

我确定你是否放在后面:

if(isset($_SESSION['admin_user']))
{

声明此功能

function listPages()
{
    //Do something here
}

你的错误会消失。

我可以看到你正在尝试在结构代码中使用函数,就像它们在某个类(面向对象的代码)中一样,并且不幸的是PHP不会那样工作。