PHP不能使用变量定义的外部函数

时间:2012-03-04 10:08:29

标签: php xml function variables undefined

我正在研究一个项目(简单的XML CMS),只是为了学习一些基本的PHP。

首先,我包含一个config.php文件,其中包含有关CMS的信息,然后我为URL路由添加了route.php,之后我包含了一个与WordPress非常相似的functions.php文件(包含所有功能,例如加载帖子,标签,类别等。)。

结构如下:

<?php
    function latestProducts($amount = 6){
    }

    function products($search = FALSE, $query= '', $page = 1, $results = 5){
    }

    function getProductById($id){
    }

    function getProductTitleById($id){
    }

    function getProductByExcerpt($excerpt){
    }

    function getProductTitleByExcerpt($excerpt){
    }

    function getPost($id, $title, $description, $category, $excerpt = FALSE){
    }

    function getTitle(){
    }

    function breadcrumb($params, $first){
    }

    function pagination($page, $pages){
    }
?>

在config.php文件中我也使用这段代码:

$xml = simplexml_load_file("products.xml") or die("The product XML file couldn't be loaded.");

但是当我尝试从我在functions.php中编写的函数中访问$ xml时,我得到一个未定义的变量通知。 (我也尝试在函数定义之前将$ xml变量放在functions.php中,但我得到了相同的结果。)

我的错误是什么?我知道这很简单;我现在看不清楚。

3 个答案:

答案 0 :(得分:5)

您有一个范围问题。在全局范围内声明的变量在函数内部不可见。 The manual解释了你可以做些什么。概述:

  • 在函数开头使用global $xml;将全局范围内的变量导入函数的局部范围
  • 将变量存储为全局变量superglobal的键,即$GLOBALS['xml']
  • 使变量成为类的静态成员或创建单例构造
  • 将变量作为参数传递给需要它的每个函数

注意,当使用良好的OOP式架构时,通常可以避免这些问题,例如, $xml将是需要直接访问DOM对象的类实例的属性。

答案 1 :(得分:3)

函数或方法没有范围。为了使用外部声明的变量。使用global关键字告诉服务器使用更高范围内定义的变量。

$varname = "value";
function yourfunctionname() {
    //In order to use the variable declare you want to use the globally declared 
    global $varname;
    //now $varname will have "value` as its value

   //continue with your logic
}

答案 2 :(得分:2)

$xml是全局变量,您需要使用global关键字。

function products($search = FALSE, $query= '', $page = 1, $results = 5){
    global $xml;
    //...
}