while и include совместимо?

KrotAnn

Новичок
while и include совместимо?

Я делаю так:
PHP:
while ($i <$numrows) 
 {  $cod = mysql_result($res,$i,"code");
  print $cod."<br>";  
 include_once('geocalc.php');  
$i++;  
}
В файле geocalc.php делаются вычисления на основе того какой код туда пришёл. Но в результате я получаю:
77043
Distance In Miles: 5.96573878433
77045
Т.е. он считает только первый раз, а второй нет.
В чём я ошибаюсь ?
 

KrotAnn

Новичок
Работает правильно выдаёт два значения, но в конце пишет
Fatal error: Cannot redeclare class geocalc in x:\home\localhost\www\geocalc.php on line 32
32 строка и далее это вот:
class GeoCalc {
var $PI = 3.14159265359;
var $TWOPI = 6.28318530718;
var $DE2RA = 0.01745329252;
var $RA2DE = 57.2957795129;
var $ERAD = 6378.135;
var $ERADM = 6378135.0;
var $AVG_ERAD = 6371.0;
var $EPS = 0.000000000005;
var $KM2MI = 0.621371;
var $FLATTENING = 0;

function GeoCalc() {
$this->FLATTENING = 1.0/298.26; // Earth flattening
// (WGS 1972)
return;
}

-~{}~ 14.01.06 17:54:

Автор оригинала: white phoenix
[m]include_once[/m] замени на [m]include[/m].
Работает правильно выдаёт два значения, но в конце пишет
Fatal error: Cannot redeclare class geocalc in x:\home\localhost\www\geocalc.php on line 32
32 строка и далее это вот:
PHP:
class GeoCalc {    
var $PI = 3.14159265359; 
   var $TWOPI = 6.28318530718;  
  var $DE2RA = 0.01745329252;
    var $RA2DE = 57.2957795129; 
   var $ERAD = 6378.135;  
  var $ERADM = 6378135.0;
    var $AVG_ERAD = 6371.0;  
  var $EPS = 0.000000000005;
    var $KM2MI = 0.621371;
    var $FLATTENING =  0;   
   function GeoCalc() {   
 	$this->FLATTENING = 1.0/298.26; 
 // Earth flattening                   
                    // (WGS 1972)     
 return;   
 }
 

white phoenix

Новичок
А зачем вообще include в цикле?
PHP:
include_once('geocalc.php');  
while ($i <$numrows)  
{
 $cod = mysql_result($res,$i,"code"); 
 print $cod."<br>";
 // твои действия с учетом подключенного geocalc.php
 $i++;   
}
[telepate]
Найди в geocalc.php после объявления класса вызов функции подсчета и перенести в то место вышеприведенного кода, где "твои действия"
[/telepate]
 

KrotAnn

Новичок
Там Ну ОЧЕНЬ большой код...
Поэтому я и хочу вставить через include

-~{}~ 14.01.06 18:03:

При попытке вынести в отдельный файл выдаёт ошибку
Fatal error: Cannot instantiate non-existent class: geocalc in x:\home\localhost\www\geocalc.php on line 25
25 строка это:
$oGC = new GeoCalc();
 

white phoenix

Новичок
KrotAnn
> Там Ну ОЧЕНЬ большой код...
> Поэтому я и хочу вставить через include
Ржунимагу....
> Cannot instantiate non-existent class: geocalc
Говорит что класс geoclac не объявлен, напутала ты что-то опять. Между тем задача ОЧЕНЬ простая, как сделать я написал выше, в geocalc.php должно быть только объявление классов/функций.
 

_RVK_

Новичок
Там Ну ОЧЕНЬ большой код.
Ндас... Ты когда нибуть слышала про функции? Почему бы тебе не оформить твой большой код в фунуцию. А твой вариант с include в корне не верный. Так НЕЛЬЗЯ делать.
 

KrotAnn

Новичок
Объясните ламеру самоучке:
Я пытаюсь с помощью include не сорить в своём коде, чтобы потом было проще разобрать что там к чему. Почему так нельзя ?
 

white phoenix

Новичок
KrotAnn
> Объясните ламеру самоучке
Я тоже самоучка, но вроде не ламер :)
include не для этого предназначен, объявляй функции. Чтобы понять как лучше делать советую посмотреть примеры скриптов известных, например форумов phpBB или vBulletin.
> Почему так нельзя ?
Во-первых чтение каждый раз файла, во-вторых конфликты возможны, в общем изврат.
Между прочим, в твоем примере можно обойтись без этого всего.
 

_RVK_

Новичок
KrotAnn
include не предназначен для этого. Эта конструкция для разделения кода на части. Для того сто бы этот код можно было использовать в различных скриптах. А не для того, что бы нескольео раз в одном.

Но в PHP есть функции. Еапример в твоем слкчае ты можешь сделать так

PHP:
function foo() {
  //тут некий код выполняющий кукую то логику
  return result;
}

while ($i <$numrows) {  
    $cod = mysql_result($res,$i,"code");
    print $cod."<br>";  
    print foo();  
    $i++;  
}
Теперь функцию ты можешь вынести в отдельный файл, например в тот же что ты пытешься инклюдить, и подключать там где тебе нужна функция.
 

SelenIT

IT-лунатик :)
KrotAnn

Выносить код в подключаемые файлы можно, но делать это нужно с умом, именно так,
чтобы потом было проще разобрать что там к чему.
Например, в начале скрипта инклюдить (один раз) библиотеки функций и классов - нормально и удобно. Инклюдить в зависимости от какого-то условия либо одно, либо другое, но тоже один раз - нормально. Инклюдить, к примеру, шаблоны HTML со вставками <?=$variable?> - тоже вполне жизнеспособный подход, тут как раз может возникнуть include в цикле, но это уже спорное решение.

А просто разбивать неструктурированного кода на файлы, наоборот, запутывает код, а не упрощает его. В твоем случае, видимо, код на файлы разбит, но определение функций и их вызов все равно остались в одном файле. Так какой был смысл выносить?
 

_RVK_

Новичок
Нда... а я был в ужасе от огромного свича и кучи глобал
 

KrotAnn

Новичок
Всё заработало!!! Это Моя первая прога в объектах! Спасибо за разъяснения...
 
Сверху