Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Тупняк с передачей функции в виде параметра

339
22 июня 2009 года
verybadbug
619 / / 12.09.2005
есть такой код
Код:
class ymaps {
  var $key;
  var $items = array();
  //переменные, необходимые для парсинга
  var $elements;
  var $geoobject_idx;
  function ymaps($key = null) {
    $this->key = $key;
  }
  function load($geocode, $key = null) {
    //собственно геокодирование
    if ($key != null) { $this->key = $key; }
    if ($this->key != null) {
      //чистим массив гео-объектов
      $this->items = array();
      //определяем базовый url
      $base_url = "http://geocode-maps.yandex.ru/1.x/?key={$this->key}";
      //определяем url запроса, при этом кодируем адрес
      $request_url = $base_url . "&geocode=" . urlencode($geocode);
      //отправляем запрос, в ответ получаем xml
      $data = file_get_contents($request_url);
      //парсим xml
      $parser = xml_parser_create();
      xml_set_element_handler($parser, "ymaps::startElement", "ymaps::endElement");
      xml_set_character_data_handler($parser, "ymaps::stringElement");
      xml_parse($parser, $data, true);
      xml_parser_free($parser);
    }
  }
  //функции для парсинга
  function startElement($parser, $name, $attrs) {
    array_push($this->elements, $name);
    if ($name == "GeoObject") {
      $this->geoobject_idx = count($this->items);
      $this->items[] = array();
    }
  }
  function endElement($parser, $name) {
    array_pop($this->elements);
  }
  function stringElement($parser, $str) {
    $name1 = count($this->elements) > 0 ? $this->elements[count($this->elements) - 1] : "";
    $name2 = count($this->elements) > 1 ? $this->elements[count($this->elements) - 2] : "";
    $name3 = count($this->elements) > 2 ? $this->elements[count($this->elements) - 3] : "";
    if (($name1 == "kind") && ($name2 == "GeocoderMetaData") && ($name3 == "metaDataProperty")) {
      $this->items[$this->geoobject_idx]["kind"] = $str;
    } elseif (($name1 == "text") && ($name2 == "GeocoderMetaData") && ($name3 == "metaDataProperty")) {
      $this->items[$this->geoobject_idx]["text"] = $str;
    } elseif (($name1 == "lowerCorner") && ($name2 == "Envelope") && ($name3 == "boundedBy")) {
      $this->items[$this->geoobject_idx]["lowerCorner"] = $str;
    } elseif (($name1 == "lowerCorner") && ($name2 == "Envelope") && ($name3 == "boundedBy")) {
      $this->items[$this->geoobject_idx]["upperCorner"] = $str;
    } elseif (($name1 == "pos") && ($name2 == "Point")) {
      $this->items[$this->geoobject_idx]["pos"] = $str;
    }
  }
}

он конечно же не работает.... вызов функций ymaps::startElement, ymaps::endElement и ymaps::stringElement при парсинге происходит как общий вызов функций.. и само-собой $this->items объекта и всё остальное, что с объектом связано - недоступно....
подскажите, если кто сталкивался, как это лечится.... или может кам-то другим путём идти тут надо?
заранее благодарен...
366
22 июня 2009 года
int
668 / / 30.03.2005
Чё-то там такое вроде self::$staticvar что ли...
http://www.php.net/manual/ru/language.oop5.static.php
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог