我遇到一个问题,我有一个类bm_products_filter
,我无法从index.php文件中看到一个变量。
我有2个文件:index.php和bm_products_filters.php
我在index.php中有一个查询,我想在bm_products_filters.php中回显
(这里有一些数据库函数(它们正在工作,因为我可以正确地回显index.php中的变量)
$product_count .= "SELECT COUNT(p.products_id) as total
from
" . TABLE_PRODUCTS . " p
left join " . TABLE_SPECIALS . " s
on p.products_id = s.products_id
left join " . TABLE_MANUFACTURERS . " m
on p.manufacturers_id = m.manufacturers_id
join " . TABLE_PRODUCTS_DESCRIPTION . " pd
on p.products_id = pd.products_id
join " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c
on p.products_id = p2c.products_id
where
p.products_status = '1'
and pd.language_id = '" . (int) $languages_id . "'
and p2c.categories_id = '" . (int)$current_category_id . "'";
$product_count_query = tep_db_query($product_count);
$product_count_tally = tep_db_fetch_array($product_count_query);
global $test_me;
$test_me = $product_count_tally['total'];
?>
我试图回应的变量是$test_me
。
类bm_products_filter
从index.php调用(间接猜测),如下所示:
<?php echo $oscTemplate->getBlocks('boxes_column_left'); ?>
getBlocks
函数查看文件夹“boxes”中的所有PHP文件,并查找左列的文件(bm_products_filters.php显示在其中)。
现在这里是我完全错误的地方,但我不知道该怎么办。
在bm_products_filters.php中我只是想做:
echo $test_me;
但是我一无所获。我认为声明它global
可能有用,但是没有用。我想我需要用->
来调用它
我真的不太了解范围。
希望我在这里提供足够的信息?如果它需要更多,请告诉我。
更新:
这是我试图做的,但它不起作用:
//index.php
$product_count .= "SELECT COUNT(p.products_id) as total
from
" . TABLE_PRODUCTS . " p
left join " . TABLE_SPECIALS . " s
on p.products_id = s.products_id
left join " . TABLE_MANUFACTURERS . " m
on p.manufacturers_id = m.manufacturers_id
join " . TABLE_PRODUCTS_DESCRIPTION . " pd
on p.products_id = pd.products_id
join " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c
on p.products_id = p2c.products_id
where
p.products_status = '1'
and pd.language_id = '" . (int) $languages_id . "'
and p2c.categories_id = '" . (int)$current_category_id . "'";
$product_count_query = tep_db_query($product_count);
$product_count_tally = tep_db_fetch_array($product_count_query);
$test_me = $product_count_tally['total'];
function product_filter_count() {
global $test_me;
return $test_me;
}
//bm_products_filter.php
echo product_filter_count();
我正在调用未定义的函数错误。如果我在index.php中回显函数它就可以了。为什么不能从其他功能中看到它?
答案 0 :(得分:1)
您需要在要访问它的任何函数/方法中添加global $test_me;
。
通过将global $test_me;
添加到构造函数并将该值设置为属性,您可以在实例化时为整个类提供对该值的访问权。
当您将变量设置为属性时,可以通过在变量前添加&
来通过引用传递它。
class testclass {
public gTestMe;
public function __construct() {
global $test_me;
$this->gTestMe = &$test_me;
}
}
我实际上并不是100%确定传递参考部分。我将测试确认,但它应该工作。 已确认确实有效。
我不建议使用像这样的全局变量,因为它通常不是好的做法。有许多更好的方法可以实现更易于维护的类似功能。
答案 1 :(得分:0)
您应该尝试将其作为session variable
或parameter
链接传入。如果您使用session variable
只clear
session value
在您的final page
。
答案 2 :(得分:0)
在很多语言中,如果在函数/方法之外声明变量,它们会自动具有全局范围,允许它们被同一个类中的任何方法访问(例如java)
php不会像这样授予全局范围,所以你有几个选择。
您可以使用全局关键字“
<?php
$test_me = "hello";
function test()
{
global $test_me;
}
test();
?>
或者您可以将其作为参数传递给函数
<?php
$test_me = "hello";
function test($global_var)
{
$local_var = $global_var;
}
test($test_me)
?>
如果你想在多个类/文件中使用变量,我会将它们放在一个单独的文件中,然后在需要它们的文件中使用include或require语句。这样,你不必在新文件中包含一堆你不需要的PHP代码,只需要包含变量。