PHP类变量在While循环中清空

时间:2010-02-12 11:01:53

标签: php class variables while-loop

我一直在讨论写几个星期的PHP课程,我想我已经掌握了他的基础知识,但我有点难过。

作为我正在做的事情的简化示例:

我已经在我的类(someClass)和外部文件(config.php)中声明并实例化了一个公共变量($ myURL),并使用URL(http://demo.com)填充了变量。

在同一个类中的函数(make_array())中,我在while()循环中使用声明的变量($ myURL)来构建一个关联的数据数组,我在类外部使用它来构建列出的输出( output.php)。

一旦我在外部文件(config.php)中使用类函数(set_myurl($ url))设置了变量,我可以通过使用echo将设置的URL打印到类文件之外很容易地访问它页面。

当我循环遍历数组并且我想将预定义变量($ myURL)设置为我在类文件中使用make_array()函数构建的关联数组中的各个子数组时出现问题。 make_array()函数接受MSSQL $结果并循环创建插入URL的数组的行(如果不存在)并且第二个参数($ add_my_url)设置为true。

在函数中,定义的变量变为空,但仍保持设置,因为我已经使用内置的PHP函数empty(),isset()和is_null()对其进行了测试,以便解决问题。

我想知道是否有人对他们有这方面的任何知识或经验。

简要介绍我在做什么

<?php
class someClass {
var $myURL = '';

public function set_myurl($url){
$this->myURL = $url;
}

public function make_array($db_result_array, $add_my_url = false){
$new_array = array();
while($row = $db_result_array){         
// build array
$array = array(
'Amount' => $row['Amount'],
'Description' => $row['Description'],
'URL' => ($add_my_url ? (!$row['URL'] ? $this->myURL : $row['URL']) : $row['URL'])
);
// merge array  
$new_array[] = $array;          
}       

return $new_array;
}

}
?>

<?php
// config.php
$myClass = new someClass;
$myClass->set_myurl('http://demo.com');

// this works and displays: http://demo.com
echo $myClass->myURL;
?>

我知道这个例子非常抽象,但我不想发布完整的2000行PHP。

如果您需要更多说明,请询问。我非常有信心我已经将问题缩小到这个函数和while()循环。

感谢。

2 个答案:

答案 0 :(得分:2)

我相信你的三元条件有问题,试试这个:

class someClass
{
    public $myURL = '';

    public function set_myurl($url)
    {
        $this->myURL = $url;
    }

    public function make_array($db_result_array, $add_my_url = false)
    {
        $new_array = array();

        while ($row = $db_result_array)
        {
            // build array
            $array = array
            (
                'Amount' => $row['Amount'],
                'Description' => $row['Description'],
                //'URL' => ($add_my_url ? (!$row['URL'] ? $this->myURL : $row['URL']) : $row['URL'])
            );

            if ($add_my_url === true)
            {
                $array['URL'] = $row['URL'];

                if (empty($array['URL']))
                {
                    $array['URL'] = $this->myURL;
                }
            }

            // merge array  
            $new_array[] = $array;          
        }    

        return $new_array;
    }
}

答案 1 :(得分:0)

问题可能就在这里while($row = $db_result_array){

你应该试试for / foreach吗?