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

Ado*_*dis 0 php xml variables function 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){
    }
?>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Ano*_*ode 5

你有一个范围问题.在全局范围内声明的变量在函数内部不可见.该手册解释了您可以采取的措施.概述:

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

请注意,当使用良好的OOP样式体系结构时,通常可以避免这类问题,例如$xml,需要直接访问DOM对象的类实例的属性.