Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсивные типы данных 
:(
    Опции темы
Elfet
Дата 5.4.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Поддерживается ли в PHP рекурсивные типы данных?
Код

$kernel = new kernel();
$kernel->kernel =& $kernel;


Вот у меня такой код есть:
index.php:
Код

$kernel = new kernel();
$kernel->kernel =& $kernel;

Код

class kernel {
   var $kernel;
   var $boxy;
   function kernel()
   {
       require_once ROOT_PATH . "kernel/boxy.php";
       $this->boxy = new boxy();
       $this->boxy->kernel =& $this->kernel;
   }
}

boxy.php:
Код

class boxy {
  var $kernel;
  function boxy()
  {
    $this->kernel->boxy;
  }

}



--------------------
PM MAIL WWW Skype   Вверх
smartov
Дата 5.4.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 1
Всего: 259



Да работают.
Код

<?
class Kernel
{
    var $kernel;
    var $testvar;
    function Kernel()
    {
        echo "Started<br>\n";
        $this->testvar = 'Testvar value<br>';
    }
}

$kernel = new Kernel();
$kernel->kernel =&$kernel;
echo $kernel->kernel->testvar;
echo $kernel->kernel->kernel->testvar;
echo $kernel->kernel->kernel->kernel->testvar;
echo $kernel->kernel->kernel->kernel->kernel->testvar;

?>


А почему спрашиваешь. Проверить то вон 10 строчек кода всего..

Это сообщение отредактировал(а) smartov - 5.4.2006, 13:24
PM MAIL   Вверх
Elfet
Дата 6.4.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Да, я уже проверил smile Просто интересно как он их поддерживает smile Может память при етом ужасно жрёт, или нормально, как в C++


--------------------
PM MAIL WWW Skype   Вверх
OlegNT
Дата 19.4.2006, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 21.3.2006
Где: Нижний Тагил

Репутация: нет
Всего: нет



Люди, а если у меня есть массив (дерево) с неизвестным числом уровней, как его можно обойти рекурсивно?  

Это сообщение отредактировал(а) OlegNT - 19.4.2006, 20:14
PM MAIL WWW Jabber   Вверх
Ciber SLasH
Дата 20.4.2006, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Типа так:
1) передаёшь в рекурсивную функцию массив
2) функция пробегает по всем элементам массива и смотрит, является ли текущий элемент массивом. Если да, то передаёт этот элемент самой себе, иначе выводит его (на экран или в лог, куда надо короче) 
PM   Вверх
Elfet
Дата 21.4.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



OlegNT, рекурсивной функцией? smile 


--------------------
PM MAIL WWW Skype   Вверх
Mal Hack
Дата 21.4.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Стоп. Это нерекурсивный тип данных. Ты свойству объекта присваиваешь ссылку на объект. Рекурсия это вызов функции самой себя.
А ссылочный тип данных это несколько другое. 
PM ICQ   Вверх
Elfet
Дата 22.4.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Mal Hack, а нам на программировании в универе, расказывали про такой же тип, но на Си++ и нзывали его рекурсивным:
Код

struct node {
    int inf;
    node * ref;
};

И можно теперь вот так рекурсивно обращаться (если есть сам список):
Код

mynode->ref->ref->ref->ref->ref->inf++;
 


--------------------
PM MAIL WWW Skype   Вверх
Mal Hack
Дата 22.4.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Да, есть такое дело. Но тут вот в чем фишка. Я лично всегда по этому поводу со многими людьми дискутировал. Тип данных у тебя - структура. Это сложный тип данных. Ты используешь переменую ссылочного типа данных (указателя) на память с этой же структурой. Т.е. понятие рекурсивного типа данных - абстрактно. Оно, как бы, показывает принцип.

Но, ИМХО, рекурсия это несколько другое, т.е. само понятие в данном случае некорректно.
Возьмем ПХП. Есть класс, созданный по его прототипу объект, со свойством - ссылочного типа данных. Что будет рекурсивного типа данных? smile 
PM ICQ   Вверх
Elfet
Дата 23.4.2006, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



А ещё намсказали, что не все языки поддерживают такую фичу smile 


--------------------
PM MAIL WWW Skype   Вверх
Mal Hack
Дата 23.4.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Ве может быть... 
PM ICQ   Вверх
Alone
Дата 25.4.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: нет
Всего: 6



Mal Hack Поддерживаю.
Это больше похоже на рекурсивное обращение к данным, но не рекурсивный тип данных... 


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1306 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.