?
Hallo Jens !
Ich habe mich auch gewundert ! Und ich kann es auch nicht verstehen, wieso die Übergabe per reference erfolgt ! Aber es ist so, der Code ist schon richtig. Ich bekomme tatsächlich bei "nachher" einen anderen nämlich den neuen Wert, der ich mit setextent gesetzt habe und der mit der vorigen Zuweisung gar nichts zu tun hat, zurückgeliefert ! Das einzige, was ich mir vorstellen kann, woran es eventuell liegen könnte, ist, dass es eine PHP-Schnittstelle für ein Mapserver (Landkarte und ähnliches Zeug) ist, und das ist mit C programmiert worden und beispielweise auch die Instanzen tue ich nicht mit new erzeugen, sondern einfach durch bloße Zuweisung. Anders kann ich mir das nicht erklären.
Da ein komplettes Programmstück:
<?php
$map_path = "ms_tmp/";
$map_file = "mymap.map";
//zuerst abfragen, ob Eingabe leer
if(trim($_POST["expr"]) == "") {
echo "Eingabe leer.";
} else {
$map = ms_newMapObj($map_path.$map_file); //Konstruktor
//je nach Abfrage, Layerobjekt zuweisen
if(strtolower($_POST["polygon"]) == "land") {
$layer = $map->getLayerByName("LAND");
$shape_filename = "states_ugl";
$column = "STATE";
} else {
$layer = $map->getLayerByName("WATER");
$shape_filename = "hydrop_ugl";
$column = "NAME";
}
//neues ShapeFileObj erzeugen
$layer_src = $layer->data;
$dbase_src = $layer->data . ".dbf";
$new_shape_file = ms_newShapefileObj($map->shapepath . "/" . $layer_src, -1); //Konstruktor
//Zählvariable
$found = 0;
//Dbase-Datei durchsuchen
if($db_handle = dbase_open("ms_tmp/" . $map->shapepath . "/" . $dbase_src, 0)) {
$num_rows = dbase_numrecords($db_handle);
$all_records = array(); //zur Aufbereitung von Daten
for($i = 1; $i <= $num_rows; $i++) {
$record = dbase_get_record_with_names($db_handle, $i);
$regular_expr = "/^" . $_POST["expr"] . ".*/i";
if(@preg_match($regular_expr, trim($record[$column]))) {
//gefunden Datensätze zählen
$found++;
//Abfrage in der SHP-Datei durchführen
//dbase beginnt bei 1, mapscript aber bei 0 !
$new_shape_extent = $new_shape_file->getExtent($i-1); //extent für den Record
$minx = $new_shape_extent->minx;
$miny = $new_shape_extent->miny;
$maxx = $new_shape_extent->maxx;
$maxy = $new_shape_extent->maxy;
$return_value = change_coordinates($all_records,$record[$column], $minx,$miny,$maxx,$maxy);
/*eigene Methode: wenn nicht gefunden, dann ist ein value unter diesem Namen noch nicht
vorhanden und muss eingefügt werden*/
if($return_value == False) {
array_push($all_records, trim($record[$column])."|".$minx."|".$miny."|".$maxx."|".$maxy); //eigene Methode
}
}
}
//Auswerten, ob irgendwas gefunden:
if($found == 0) {
echo "Nichts gefunden.";
} else {
echo 'Die Suche nach "' . $_POST["expr"] . '" ergab ' . $found . ' Ergebnisse, die zu ' . count($all_records) . ' geographischen Objekt(en) zusammengefasst wurden.<br><br>';
print_html($all_records, "|", $layer->name, $column); //eigene Methode
}
} else {
echo "DB Fehler.";
}
}
?>