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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение индекса массива через __get 
:(
    Опции темы
Mal Hack
Дата 6.8.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Сабж заключается в чем. Через __get( $name ) делаем перегрузку, обрабатывая обращение к несуществующим свойствам объекта.
Препдоложим, есть вызов:
$a = $this->LNG['index'].
Свойства LNG в объекте нет. В __get имеем только $name == "LNG". Вопрос заключается в том, как можно получить имя индекса, тобишь "index".
PM ICQ   Вверх
jzZ
Дата 6.8.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

$this->LNG['index']

Возможно я ошибаюсь, но тут идет обращение к переменной внутри класса, она реализует лишь описание объекта.
метод __get() вызывается при попытке прочитать значение неопределенного свойства.
Кажется правильно будет вызывать несуществующие свойства так:
obj->LNG = "blabla";
т.е. уже после определения самого объекта, а внутри не знаю, хотя может быть LNG это уже переменная к-рой было передано св-во из объекта из другого класса? Ну это лишь мои (возможно неправильные рассуждения), попробуйте конкретней описать ситуацию.
А если речь идет о инициализации неизвестного св-ва по ключу в массиве т.е. так:
Код

obj['index'] = "blabla";

то тут надо воспользоваться интерфейсом ArrayAccess, который поставляется с SPL.

Добавлено @ 17:48 
точное описание ArrayAccess и его методов
PM MAIL   Вверх
Mal Hack
Дата 6.8.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(jzZ @  6.8.2006,  18:46 Найти цитируемый пост)
метод __get() вызывается при попытке прочитать значение неопределенного свойства.


Цитата(Mal Hack @  6.8.2006,  16:11 Найти цитируемый пост)
$a = $this->LNG['index'].

Ну как не обращение к несуществующему свойству? LNG через var не описывался.

Цитата(jzZ @  6.8.2006,  18:46 Найти цитируемый пост)
Кажется правильно будет вызывать несуществующие свойства так:
obj->LNG = "blabla";

Это уже __set будет.

PM ICQ   Вверх
jzZ
Дата 6.8.2006, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Это уже __set будет.

Это ж только пример, если хотите только __get(), тогда так: $a = obj->LNG;
Я просто хотел показать, что если метод __get() реализован в том же классе, в котором вы обращаетесь к несуществующей переменной LNG, не должен работать. По принципу должен работать, если вы обращаетесь к несуществуещему св-ву  уже самого объекта т.е. так $obj->LNG.

Добавлено @ 18:09 
Цитата

Вопрос заключается в том, как можно получить имя индекса, тобишь "index".

Придется обращаться так $obj[index]; за пределами класса реализующего метод __get()
К сожалению сейчас нет возможности проверить свои слова за php, о пределах действия __get()

Это сообщение отредактировал(а) jzZ - 6.8.2006, 18:09
PM MAIL   Вверх
Mal Hack
Дата 6.8.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(jzZ @  6.8.2006,  19:04 Найти цитируемый пост)
Я просто хотел показать, что если метод __get() реализован в том же классе, в котором вы обращаетесь к несуществующей переменной LNG, не должен работать. По принципу должен работать, если вы обращаетесь к несуществуещему св-ву  уже самого объекта т.е. так $obj->LNG.

Ты ошибаешься. __get работает так, как  я описал выше. Это 100% проверенно.

Цитата(jzZ @  6.8.2006,  19:04 Найти цитируемый пост)
Придется обращаться так $obj[index]; за пределами класса реализующего метод __get()

Я через this обращаюсь, и такой синтаксис будет 100% ошибочным.
PM ICQ   Вверх
jzZ
Дата 6.8.2006, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Я через this обращаюсь, и такой синтаксис будет 100% ошибочным. 

Невнимательность... Чтобы обращаться как я сказал
Цитата

то тут надо воспользоваться интерфейсом ArrayAccess, который поставляется с SPL.

PM MAIL   Вверх
Mal Hack
Дата 6.8.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



МНе надо все стандартными средствами сделать без лишних телодвижений.
Система переносима должна быть.
PM ICQ   Вверх
jzZ
Дата 6.8.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Я просто хотел показать, что если метод __get() реализован в том же классе, в котором вы обращаетесь к несуществующей переменной LNG, не должен работать. По принципу должен работать, если вы обращаетесь к несуществуещему св-ву  уже самого объекта т.е. так $obj->LNG.

Я не ошибаюсь, только что все сам проверил, просто мы не поняли друг друга. Ты говорил о том что и я только другими словами.
Не понимаю чего ты хочешь, сложно сказать без какого-либо кода.
Цитата

Как можно получить имя индекса, тобишь "index". 

Код

class Setter
{
   public $n;
   private $x = array("a" => 1, "b" => 2, "c" => 3);

   private function __get($nm)
   {
       echo "Getting [$nm]\n";

       if (isset($this->x[$nm])) {
           $r = $this->x[$nm];
           print "Returning: $r\n";
           return $r;
       } else {
           echo "Nothing!\n";
       }
   }
}

отсюда: http://ru.php.net/manual/en/language.oop5.overloading.php

Добавлено @ 19:45 
Это если ты имя хочешь получить, а если работать с объектом как с массивом, то только с помощью SPL.
PM MAIL   Вверх
Mal Hack
Дата 6.8.2006, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Вот по твоему примеру. В $nm я получаю LNG. При вызове
$a = $this->LNG['index']
Массива X у меня нет.
Мне надо вернуть: К примеру
$b->LNG['index']
так вот имя индекса я НЕ МОГУ ПОЛУЧИТЬ.
PM ICQ   Вверх
imm
Дата 6.8.2006, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

class CPropChecked implements ArrayAccess
{
//private
   private $m_prop_name = '';
   
//public

   //ArrayAccess interface
   public function offsetExists($offset)
   {
       return TRUE;
   }
   
   public function offsetGet($offset)
   {
       throw new Exception('Undefined index `'.$offset.'` in property `'.$this->m_prop_name.'`!');
   }
   
   public function offsetSet($offset, $value)
   {
   }

   public function offsetUnset($offset)
   {
   }

   //...
   public function __construct($prop_name)
   {
       $this->m_prop_name = $prop_name;
   }
}


class CLoader
{
//private
   private function __get($nm)
   {
       return new CPropChecked($nm);
   }
}


//Implementation


$instance = new CLoader;
try {
    $instance->LNG['index'];
}
catch(Exception $e) {
    print($e);
}

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


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


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

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



НИчего не понял. Конструктор полуает один параметр, но ты его ниоткуда не передаешь..
ЗЫ: Решить задачу надо через __get или встроенные уже в модель ООП методами.
PM ICQ   Вверх
jzZ
Дата 6.8.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Mal Hack
SPL поставляется вместе php5 он и является стандартным ООП решением, не нужно изобретать колесо, читай ссылку что я дал.
imm привел наглядный пример его реализации.
Цитата

$b->LNG['index']

это ты получишь работая с ArrayAccess, не иначе как.
PM MAIL   Вверх
imm
Дата 6.8.2006, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В принцепи, подобная ситуация возникать не должна вовсе. Наверняка тебе нужно все классы, для объектов которых, может быть вызван метод LNG неследовать от какого-нибудь базового, в котором этот метод/член определен по умолчанию, или определена реакция на вызов этого члена, а в наследниках уже переопределять.
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 7.8.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Ребят, вы меня просто не поняли...
Ладно, обошолся более простым вариантом.
PM ICQ   Вверх
imm
Дата 9.8.2006, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Приношу свои извинения за длительную задержку, но меня твоя проблема очень заинтересовала и я  кой-чего написал. Кстати, если есть дерево (по которому мы будем ходить), то можно с помощью этой концепции реализовать что-то типа SimpleXML (я имею ввиду принцип доступа), вручную (а можно и красивее чем SimpleXML, только гора-а-аздо тяжелее smile)) Лови пример:
Код

//Читалка индексов
class CIndexReader implements ArrayAccess
{
//private
   private $m_member_name;
   private $m_sender_object;
   
   
   //На всякий случай
   private function __get($name)
   {
       throw new Exception('Error! Undefined operation with CIndexReader.'."<br>\n");
   }
   private function __set($name, $value)
   {
       throw new Exception('Error! Undefined operation with CIndexReader.'."<br>\n");
   }
   private function __call($name, $params)
   {
       throw new Exception('Error! Undefined operation with CIndexReader.'."<br>\n");
   }
   
   
//public
   //ArrayAccess interface
   public function offsetExists($offset)
   {
       return TRUE;
   }
   
   public function offsetGet($offset)
   {
       return $this->m_sender_object->getMemberValue($this->m_member_name, $offset);
   }
   
   public function offsetSet($offset, $value)
   {
       $this->m_sender_object->setMemberValue($this->m_member_name, $offset, $value);    
   }
   
   public function offsetUnset($offset)
   {
       $this->m_sender_object->freeMemberValue($this->m_member_name, $offset); 
   }
   
   //...
   
   //Подготавливает читалку индексов
   public function prepare($sender_object, $member_name)
   {
       $this->m_member_name = $member_name;
       $this->m_sender_object = $sender_object;
       return $this;
   }
}




class CLoader
{
//private

   //Members actions interface
   private function __get($name)
   {
       //Если это то свойство, для которого нужен ещё и индекс, то выполняем
       return self::$m_ireader->prepare($this, $name);
   }
   
//public

    //Читалка индексов
    public static $m_ireader;


    //Внутренний интерфейс для читалки индексов
    public function getMemberValue($member_name, $index)
    {
        printf('Вы запросили свойство `%s` с индексом `%s` для чтения.'."<br>\n", $member_name, $index);
        
        //if (ещё уровень индекса)
        //    учесть полученное значение индекса.
        //    ...
        //    return self::$m_ireader; //Продолжаем цепочку индексов
        //else
        return NULL;  //Возвращаем необходимое значение
    }
    
    public function setMemberValue($member_name, $index, $value)
    {
        printf('Вы запросили свойство `%s` с индексом `%s` для записи значения `%s`.'."<br>\n", $member_name, $index, $value);
    }
    
    public function freeMemberValue($member_name, $index)
    {
        printf('Вы запросили свойство `%s` с индексом `%s` для удаления.'."<br>\n", $member_name, $index);
    }
}



class CMyClass extends CLoader
{
//Твой класс
}



//Implementation

//Создаем собственную читалку индексов для всех наследников от CLoader, одной на всех вполне хватит
CLoader::$m_ireader = new CIndexReader;

$instance = new CMyClass;

$instance->LNG['index_1'] = 'value';
$a = $instance->LNG['index_1'];
unset($instance->LNG['index_1']);
//А теперь зло
try {
    $b = $instance->LNG; //в $b записан экземпляр класса CIndexReader
    $b->any_method = 55; //Делаем что-нибудь неправильное и получаем исключение
}
catch (Exception $e) {
    print($e);
}
//А так можно
$b = $instance->LNG;
$a = $b['index_1'];
//А так нельзя, потому как CIndexReader один на всех
$instance_2 = new CMyClass; //Либо любой наследник CLoader
$x = $instance->LNG;
$x2 = $instance_2->LNG;
//Это уже неправильно, потому как $x == $x2, но ошибки не будет, пока...



Это сообщение отредактировал(а) imm - 9.8.2006, 22:13
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 9.8.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



imm, я вроде понятно же написал, что мне не МЕТОД нужен, а ЭЛЕМЕНТ МАССИВА, который является СВОЙСТВОМ.
PM ICQ   Вверх
imm
Дата 9.8.2006, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ано там так и есть, просто я попутал терминологию, ты запусти, оно работает.

В CMyClass (наследник от CLoader) по необходимости нужно переопределить следующие методы:
 - В качестве параметров функции передается имя твоего свойства и указанный индекс
 - Метод возвращает значение, которое необходимо извлеч по паре свойство[индекс]
public function getMemberValue($member_name, $index)
 - Пытается записать в пару свойство[индекс] переданное значение value
public function setMemberValue($member_name, $index, $value)
 - Пытается очистить значение, сохраненное в паре свойство[индекс]
public function freeMemberValue($member_name, $index)

Простейший пример:
Код

$b = new CMyClass;
$a = $b->myProperty['myIndex'];


В процессе выполнения последней строки, в объекте $b будет вызвана функция getMemberValue, значения переданных параметров будут:
$member_name <- 'myProperty'
$index <- 'myIndex'
И то, что эта функция возвратит будет записано в $a.

PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 9.8.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Слишком "тяжелый вариант"... Да, жаль нет перегрузки []...
PM ICQ   Вверх
WIPS
Дата 30.4.2008, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Есть какие нибудь идеи, чтобы при вот таком обращении:
Код

$a = $instance->LNG;

в $a возвращался массив
Код

array('index_1' = 'value');

а не объект класса CIndexReader? Долго кручу, пока не могу найти решения.
В худшем случае хотелось бы удостовериться, что это невозможно smile, т.к. терзают смутные сомнения, что это у меня просто не получается.
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Fortop
Дата 30.4.2008, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

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



WIPS, для этого надо хранить там массив.

$instance->LNG = array('index_1' => 'value');


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
WIPS
Дата 30.4.2008, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Fortop, обращения к полю могут идти в любом виде:
Код

$instance->LNG = array('index_1' => 'value');
$instance->LNG['index_1'] = 'value';
$a = $instance->LNG;
$a = $instance->LNG['index_1'];

хочу, чтоб работало во всех вариантах.

CyClon, надо было создать новую тему?
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Fortop
Дата 1.5.2008, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

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



WIPS,
Ну и что тут сложного?

Тебе надо будет работать с  __get(), __set(), ArrayAccess.
Выше по топику это описано. Или ты не знаешь как инкапсулировать один класс внутри другого?

Вот.
Код

class Store
{
    private $data;

    function __construct()
    {
         $this->data = new MultiAccess();
    }
}



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
WIPS
Дата 1.5.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Fortop, очень абстрактное, для меня лично, объяснение. Если не сложно ткните носом (а еще лучше куском кода).
Просто сейчас проблема заключается в следующем, есть код:
Код

$a = $instance->LNG;
$a = $instance->LNG['index_1'];

в принципе, если я верно рассуждаю, он эквивалентен такому псевдокоду:
Код

$a = $instance->LNG;
$a = $instance->LNG::getOffset('index_1');

что в свою очередь эквивалентно:
Код

$a = $instance->LNG;
$b = $instance->LNG;
$a = $b::getOffset('index_1');

т.е., и в случае обращения как к элементу массива, так и в случае обращения как к полю объекта, сначала вызывается __get(), но уже в нем мне надо знать возвращать ли объект, реализующий ArrayAccess, или просто значение запрашиваемого поля.

Цитата(Fortop @  30.4.2008,  23:15 Найти цитируемый пост)
Или ты не знаешь как инкапсулировать один класс внутри другого?

Как инкапсулировать знаю, но пока не вижу что внутри чего нужно "спрятать".

Это сообщение отредактировал(а) WIPS - 1.5.2008, 15:39
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Fortop
Дата 1.5.2008, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

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



WIPS, обрати внимание, ты хочешь чтобы к любым данным класса можно было обращаться и как к свойству и как к индексу массива.
Для свойства - нужно чтобы класс реализовывал методы __get(), __set()
Для доступа через индекс -  класс должен реализовывать интерфейс ArrayAccess.

Далее, ты хочешь чтобы любой извлекаемый элемент из этого класса тоже обладал такими же особенностями. Это значит что каждый элемент в свою очередь тоже должен реализовывать методы __get(), __set() и интерфейс ArrayAccess.

Если ты захочешь чтобы и их элементы в свою очередь обладали такими же особенностями, то и они должны быть представителями этого класса.

Вот примерно так
Код

$a = new MultiAccess;

$a['11'] = '0101';
// это будет чудо свойство
$a->child = new MultiAccess;
$a['child']['root'] = 202;
var_dump($a->child->root);


Можно модифицировать методы __get() и OffsetGet()
следующим образом

Код

    if(!array_key_exists($key, $this->_data)) {
        $this->_data[$key] = new self;
    }
    return $this->_data[$key];


Тогда станет возможным даже такое присвоение.
Код

// нам плевать, есть ли свойство, партия сказала НАДО
$a->second['rt'] = 303;
var_dump($a->second['rt']);

$a['third']->middle['read'] = 404;
var_dump($a['third']['middle']->read);


НО! В этом случае ты не сможешь определять, существует ли соответствующее свойство и индекс. И тебе прийдется писать отдельные методы для этого. В общем извращаться можно как угодно.
Совет следующий - определись, как ты будешь получать доступ, как к элементу массива, или как к свойству - так и работай. Иначе сам запутаешься smile

Вот собственно класс. Соответствующие проверки и Exception - допишешь самостоятельно.

Код

class MultiAccess implements ArrayAccess
{
    private $_data;


    public function __construct($val = array()) {
     $this->_data = $val;
    }

    public function __get($key) {
        if(!array_key_exists($key, $this->_data)) {
            $this->_data[$key] = new self;
        }
        return $this->_data[$key];
    }

    public function __set($key, $value) {
        $this->_data[$key] = $value;
    }

    public function OffsetExists($key) {
        return array_key_exists($key, $this->_data);
    }

    public function OffsetUnset($key) {
     unset($this->_data[$key]);
    }

    public function OffsetGet($key) {
        if(!array_key_exists($key, $this->_data)) {
            $this->_data[$key] = new self;
        }
        return $this->_data[$key];
    }

    public function OffsetSet($key, $val) {
     $this->_data[$key] = $val;
    }
}



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
IZ@TOP
Дата 20.5.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Блин, ребята, учите библиотеку SPL!


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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