Я уже несколько недель балуюсь написанием 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 ().
Спасибо.