php类范围调用非方法函数时不访问所有类成员

时间:2010-03-19 17:59:25

标签: php

所以我在一个类中使用一个独立的函数,它使用它所调用的类。这是函数

function catalogProductLink($product_id,$product_name,$categories=true) {
    //This is the class that the function is called from
    global $STATE;
if ($categories) {
    //The $STATE->category_id is the property I want to access, which I can't
    if (is_array($STATE->category_id)) {
        foreach($STATE->category_id as $cat_id) {
            if ($cat_id == 0) continue;
            $str .= "c$cat_id/";
        }
    }
}
$str .= catalogUrlKeywords($product_name).'-p'.$product_id.'.html';
return $str;
}

这是函数调用,它是在$ STATE类中生成的。

$redirect = catalogProductLink($this->product_id, $tempProd->product_name, true, false);

我需要访问的对象是已声明为全局的$ STATE对象。 在此函数调用之前,已经填充了许多公共属性,但是当我查看函数范围内的$ STATE对象时,它会丢失除了一个product_id之外的所有属性。对此函数重要的属性是category_id属性,它是类别ID的数组。

我想知道为什么我无法访问$ STATE对象的所有公共属性以及如何访问它们。

1 个答案:

答案 0 :(得分:1)

catalogUrlKeywords()在做什么?我打赌它会修改$STATE这听起来像一个可怕的设计BTW。如果global是框架的组成部分,请运行!

修改

或者您可以添加一个可选参数来获取category_id并完成它。也许不是$categories=true,而是$categories取一个category_id数组或零。

function catalogProductLink($product_id,$product_name,$category_ids=0) {