Php 如何在另一个类中访问全局变量
我遇到了一个问题,我有一个类Php 如何在另一个类中访问全局变量,php,scope,Php,Scope,我遇到了一个问题,我有一个类bm_products\u filter,我无法从index.php文件中查看变量 我有两个文件:index.php和bm_products_filters.php 我在index.php中有一个查询,我想在bm_products_filters.php中响应它 (这里有一些数据库函数(它们正在工作,因为我可以正确地回显index.php中的变量) 我试图回显的变量是$test\u me 从index.php调用类bm_products_filter,如下所示: &
bm_products\u filter
,我无法从index.php文件中查看变量
我有两个文件:index.php和bm_products_filters.php
我在index.php中有一个查询,我想在bm_products_filters.php中响应它
(这里有一些数据库函数(它们正在工作,因为我可以正确地回显index.php中的变量)
我试图回显的变量是$test\u me
从index.php调用类bm_products_filter
,如下所示:
<?php echo $oscTemplate->getBlocks('boxes_column_left'); ?>
但是我什么也没有得到。我想声明它为全局
可能会起作用,但那不起作用。我想我需要以某种方式用->
来调用它
不过我真的不太了解范围
希望我在这里提供了足够的信息?如果需要更多,请告诉我
更新:
这是我试图做的,但不起作用:
//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中回显该函数,它会工作。为什么它在其他函数中不可见?您需要在您想要访问它的任何函数/方法中添加
global$test\u me;
通过向构造函数添加global$test\me;
并将该值设置为属性,可以在实例化时为整个类提供对该值的访问权限
class testclass {
public gTestMe;
public function __construct() {
global $test_me;
$this->gTestMe = &$test_me;
}
}
将变量设置为属性时,可以通过在变量前面添加&
来通过引用传递它
class testclass {
public gTestMe;
public function __construct() {
global $test_me;
$this->gTestMe = &$test_me;
}
}
实际上,我不是100%确定通过参考部分。我将测试以确认,但它应该工作。确认它确实工作
我并不推荐使用这样的全局变量,因为这通常不是一个好的做法。有很多更好的方法可以实现类似的功能,而且更易于维护。您需要在任何您想要访问它的函数/方法中添加
global$test\u me;
通过向构造函数添加global$test\me;
并将该值设置为属性,可以在实例化时为整个类提供对该值的访问权限
class testclass {
public gTestMe;
public function __construct() {
global $test_me;
$this->gTestMe = &$test_me;
}
}
将变量设置为属性时,可以通过在变量前面添加&
来通过引用传递它
class testclass {
public gTestMe;
public function __construct() {
global $test_me;
$this->gTestMe = &$test_me;
}
}
实际上,我不是100%确定通过参考部分。我将测试以确认,但它应该工作。确认它确实工作
我并不推荐使用这样的全局变量,因为这通常不是一个好的做法。有很多更好的方法可以实现类似的功能,而且更易于维护。您应该尝试将其作为
会话变量
传递,或者作为参数
传递到链接中。如果您使用as会话变量
,只需清除
会话值一旦您在最后一页
中提交了事务,您应该尝试将其作为会话变量
或作为参数
在链接中传递。如果您使用as会话变量
只要清除
会话值,一旦您提交了事务在许多语言中,最终页面中的事务,如果在函数/方法之外声明变量,则它们自动具有全局作用域,允许同一类中的任何方法(例如java)访问它们
php不会像那样授予全局作用域,因此您有两个选项
您可以使用全局关键字“
也可以将其作为参数传递给函数
<?php
$test_me = "hello";
function test($global_var)
{
$local_var = $global_var;
}
test($test_me)
?>
如果您想在多个类/文件中使用变量,我会将它们放在一个单独的文件中,然后在需要它们的文件中使用include或require语句。这样,您就不必在新文件中包含一堆不需要的php代码,只需包含变量。在许多语言中,如果您在外部声明变量对于函数/方法,它们自动具有全局作用域,允许同一类中的任何方法访问它们(例如java)
php不会像那样授予全局作用域,因此您有两个选项
您可以使用全局关键字“
也可以将其作为参数传递给函数
<?php
$test_me = "hello";
function test($global_var)
{
$local_var = $global_var;
}
test($test_me)
?>
如果你想在多个类/文件中使用变量,我会将它们放在一个单独的文件中,然后在需要它们的文件中使用include或require语句。这样,你就不必在新文件中包含一堆不需要的php代码,只需包含变量。+1代表&sign。我自己在一段时间前当tr正在尝试使用函数+1中的会话变量作为&sign。我在尝试使用函数中的会话变量时,不久前就发现了这一点感谢回复。我一直在尝试实现这一点,但我遇到了问题。如果有机会,请参阅我上面的编辑。感谢您的帮助。感谢回复。我一直在尝试暗示但我遇到了一些问题。如果有机会,请参阅我上面的编辑。谢谢你的帮助。你是否在bm_products_filter.php中包含index.php?我听起来就是这样。如果你在另一个文件的开头放上require_once index.php,它应该可以工作。你是否在bm_products_filter.php中包含index.php?听起来就是这样如果你把require_once index.php放在另一个文件的开头,它应该可以工作。