PHP类变量在While循环中清空

PHP类变量在While循环中清空,php,class,variables,while-loop,Php,Class,Variables,While Loop,几周来,我一直在尝试编写一个PHP类,我想我已经掌握了一些基础知识,但我有点不知所措 作为我所做工作的简化示例: 我已经在我的类(someClass)和外部文件(config.php)中声明并实例化了一个公共变量($myURL),该类用URL()填充该变量 在同一个类中的函数(make_array())中,我在while()循环中使用声明的变量($myURL)来构建数据的关联数组,我在类外使用该数组来构建列出的输出(output.php) 一旦我在外部文件(config.php)中使用类函数(s

几周来,我一直在尝试编写一个PHP类,我想我已经掌握了一些基础知识,但我有点不知所措

作为我所做工作的简化示例:

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

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

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

当我在数组中循环时,需要将预定义变量($myURL)设置为关联数组中的各个子数组,而我正在使用类文件中的make_array()函数构建关联数组。make_array()函数接受MSSQL$结果并循环创建数组的行,如果不存在URL,则插入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()循环


谢谢。

我认为您的三元条件有问题,请尝试以下方法:

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;
    }
}

问题可能在这里
而($row=$db\u result\u array){


你应该试试for/foreach,也许?

你的例子对我来说效果很好。我想你已经做到了。设置URL时也不需要使用双三元,而是使用:'URL'=>($add\u my\u URL&&empty($row['URL'])?$this->myURL:$row['URL'])谢谢你的第一个回复。我不认为问题出在三元条件上,尽管它可能不是按照@Cryo指出的那样做的最优化的方法。问题是$this->myURL变量在函数中似乎是空的,尽管看起来设置正确。这是一个奇怪的问题,因为它看起来“这太简单了。@回形针如果你打印$this->myURL作为make_array()方法的第一行,它仍然是空的吗?如果是这样,你提供的代码似乎没有包含你的问题,myURL将在其他地方被取消设置(可能是调用设置_myURL(“”)隐藏在某个地方?).我建议不断简化类中的代码路径,以尝试解决问题方法。