Я уже несколько недель занимаюсь написанием PHP-класса, и мне нравится думать, что у меня есть ручка его основ, но я немного в тупике.Переменные класса PHP, опустошенные во время цикла
В упрощенном примере, что я делаю:
Я предрек и инстанцирован публичную переменную ($ myURL) в моем классе (SomeClass) и во внешнем файле (config.php) к классу заполнили переменную URL-адресом (http://demo.com).
В функции (make_array()) в пределах одного класса, я использую объявленную переменную ($ myURL) в цикле while() для создания ассоциативного массива данных, который я использую вне класса для создания указанного вывода (output.php).
Как только я установил переменную, используя функцию класса (set_myurl ($ url)) во внешнем файле (config.php), я могу легко получить доступ к ней за пределами файла класса, используя эхо, чтобы напечатать заданный 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() цикла.
Спасибо.
Ваш пример работает так, как ожидалось для меня. – blinry