1

我有一个问题,我有一个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 中回显该函数,它就可以工作。为什么从其他功能中看不到它?

4

3 回答 3

1

您需要添加global $test_me;您想要访问它的任何功能/方法。

global $test_me;通过添加到构造函数并将该值设置为属性,您可以在实例化时让整个类访问该值。

&当您将变量设置为属性时,您可以通过在变量前添加一个引用来传递它。

class testclass {
    public gTestMe;
    public function __construct() {
        global $test_me;
        $this->gTestMe = &$test_me;
    }
}

实际上,我对传递引用部分并不是 100% 确定的。我将进行测试以确认,但它应该可以工作。确认它确实有效。

我真的不建议使用这样的全局变量,因为这通常不是好的做法。有许多更好的方法可以完成更易于维护的类似功能。

于 2013-05-24T15:13:46.513 回答
0

您应该尝试将其作为.ifsession variable或在链接中传递,如果您使用 as只是在您的.parametersession variableclearsession valuefinal page

于 2013-05-24T15:19:10.317 回答
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 代码,只需包含变量即可。

于 2013-05-24T15:26:57.697 回答