我正在研究一个项目(简单的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中,但我得到了相同的结果。)
我的错误是什么?我知道这很简单;我现在看不清楚。
答案 0 :(得分:5)
您有一个范围问题。在全局范围内声明的变量在函数内部不可见。 The manual解释了你可以做些什么。概述:
global $xml;
将全局范围内的变量导入函数的局部范围$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;
//...
}