Переменные класса PHP, очищенные в цикле while - PullRequest
2 голосов
/ 12 февраля 2010

Я уже несколько недель балуюсь написанием PHP-класса, и мне нравится думать, что я разбираюсь в его основах, но я немного озадачен.

В качестве упрощенного примера того, что я делаю:

Я объявил и инстанцировал открытую переменную ($ myURL) в моем классе (someClass) и во внешнем файле (config.php), чтобы класс заполнил переменную URL (http://demo.com).

)

В функции (make_array ()) в том же классе я использую объявленную переменную ($ myURL) в цикле while () для создания ассоциативного массива данных, который я использую вне класса для создания перечисленных выходных данных ( output.php).

После того, как я установил переменную с помощью функции класса (set_myurl ($ url)) во внешнем файле (config.php), я могу довольно легко получить к нему доступ вне файла класса, используя 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 ]

2 голосов
/ 12 февраля 2010

Я считаю, что с вашим троичным состоянием что-то не так, попробуйте это:

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;
    }
}
0 голосов
/ 12 февраля 2010

Может быть, проблема здесь while($row = $db_result_array){

Вы должны попробовать for / foreach, может быть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...