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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объект как массив, где посмотреть инфу 
:(
    Опции темы
jzZ
Дата 20.8.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Собственно САБЖ, но не надо ссылок на официальную документацию по SPL, я там читал, но мой английский плох, так что я почти ничего не понял. Лучше на русском, может статейка у кого какая есть smile Однако если у вас нет ссылок на нужную инфу, и вы запостите сюда то как можно этим пользоваться, все равно буду вам благодарен.
Кокректно интересует как обращаться к св-ву объекта так: $obj['a'], работа с объектом как с обычным массивом при помощи функций т.е. array_flip  итд. 
Заранее благодарен!
PM MAIL   Вверх
ewolf
Дата 20.8.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

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



к свойству объекта можно обратится как

Код

$obj->property = 4; // Присвоение значения
$val = $obj->property; // Чтение значения

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


Шустрый
*


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

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



ewolf
оффтоп...
Я говорю об этом
Код

$obj['a'] = "lol"; // присвоение значения
$val = $obj['a']; // чтение значения


Добавлено @ 19:45 
Как добиться такого эффекта + использование стандартных функций для работы с объектом как с массивом?!
Насчет функций я вообще неуверен возможно ли это, но точно знаю что возможно использовать foreach для объекта типа так:
foreach($obj as $k => $v)
Об этом прочитать можно тут http://ru.php.net/SPL
Жду помощи, знатоки откликнитесь...

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


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


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

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



jzZ, что ты вообще пытаешься сделать?
PM ICQ   Вверх
jzZ
Дата 20.8.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я просто хочу разобраться в новых фичах php5.
А для наглядного примера, допустим так:
Код

<?php
$pages = array(1 => 'index.html', 2 => 'index1.html');
$index = $_GET['index'];
if (($index < 1) or ($index > 2)) {
    $index = 1;
}
?>
<html>
<head>
<title>Site</title>
</head>
<body>
<b>Добрый день!</b>
<br>
<?php
include $pages[$index];
?>
<body>
<html>

Код взят отсюда: http://qdp.ru/2006/06/17/print:page,1,include_v_php.html
Для начала можно было бы реализовать это в классе, причем индекс массива $pages и будет нашим свойством.

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


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


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

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



Цитата(jzZ @  20.8.2006,  23:55 Найти цитируемый пост)
Я просто хочу разобраться в новых фичах php5.

Какое именно?
PM ICQ   Вверх
jzZ
Дата 21.8.2006, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Mal Hack
Цитата

Я просто хочу разобраться в новых фичах php5.

Цитата

Какое именно? 

Что значит какое именно, ВО ВСЕХ!!! там множественное число...
А сейчас кокретно меня интересует доступ к объекту как к массиву, читай тему, и просьба больше не оффтопить...

PM MAIL   Вверх
Vaulter
Дата 21.8.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



jzZ, хм...
слышал только о таких методах
Код

function __get($prop_name, &$prop_value) 
    {
        if (isset($this->elem[$prop_name])) {
            $prop_value = $this->elem[$prop_name];
            return true;
        } else {
            return false;
        }
    }

    // Callback method for setting a property
    function __set($prop_name, $prop_value) 
    {
        $this->elem[$prop_name] = $prop_value;
        return true;
    }

читай про 
overload() функцию


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


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


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

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



Цитата(jzZ @  21.8.2006,  11:17 Найти цитируемый пост)
А сейчас кокретно меня интересует доступ к объекту как к массиву

Неперь покажи мне, где об этом писалось...
Первый раз в жизни слышу.
Это по сути бред, на самом деле...
Глянь сюда: http://forum.vingrad.ru/index.php?showtopic=107059&hl=
PM ICQ   Вверх
jzZ
Дата 21.8.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Vaulter
А зачем методу __get() возвращать просто true? Тем более что вызов неопределенной переменной будет таким:
$obj->property; То зачем нужен какой-то сторонний массив elum? Я говорю о таком вызове
Цитата

$obj['a'] = "lol"; // присвоение значения
$val = $obj['a']; // чтение значения

Mal Hack
Об этой ссылке я знаю, если ты не заметил в этом посте был и я )
Совсем не бред, если бы ты внимательно прочитал код предоставленный imm, и прислушался бы к моим утверждениям там (твоя ссылка), ты бы все понял. Писалось между прочи именно там http://forum.vingrad.ru/index.php?showtopic=107059&st=0

Добавлено @ 15:30 
щас колдую над наглядным примером...
PM MAIL   Вверх
jzZ
Дата 21.8.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Что типа наглядного примера или 'я же вам говорил'.
Перечитал документацию по arrayaccess, однако все равно не понял действия абстрактных методов в интерфейсе arrayaccess.
Код

<?php
Class Pizdec implements ArrayAccess {

    private $link;
    private $nFile;

    public function __construct($nFile = FALSE) {
        $this->nFile = $nFile;
        $this->link = fopen($this->nFile, "w+");
    }
    function __destruct() {
        fclose($this->link);
    }
    public function offsetGet($prop_name) {
        $data = explode("\n", file_get_contents($this->nFile));
        if($data) {
            foreach ($data as $v) {
                if (preg_match("/(".$prop_name."[||])/", $v)) {
                    echo $v;
                }
            }
        } else {
            echo "$prop_name не существует";
            return FALSE;
        }
    }
    public function offsetSET($prop_name, $prop_value) {
        fputs($this->link, $prop_name."||".$prop_value."\n");
        fflush($this->link);
    }
    function offsetExists($prop_name) {
        return TRUE; //ненужный метод
    }
    function offsetUnset($prop_name) {
        fputs($this->link, $prop_name."||:удалено:\n");
        fflush($this->link);
    }
}
$a = new Pizdec("test.txt");
$a['login'] = "jzZ";
$l = $a['login'];
?>

Если кто знает как перебрать объект как массив, буду очень благодарен примеру.
PM MAIL   Вверх
Alone
Дата 21.8.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Э... не успел... 
Единственным вариантом для тебя будет перебор (ессесно рекурсивный) объекта и создание массива.
(Я не спрашиваю зачем это тебе надо)

Код

<?
$a = &new stdClass();
$a->q = 'qqq';
$a->w = 'www';
$a->z = &new stdClass();
$a->z->e = 'eee';
$a->z->d = 'ddd';

$b = obj2arr($a);

p($b);

function obj2arr($obj){

    $result = array();

    if (is_object($obj)) {

        $params = get_object_vars($obj);

        if (count($params) == 1) {
            return $params[0];
        }

        foreach ($params as $var=>$val) {
            $result[$var] = obj2arr($val);
        }

    }else{
        return $obj;
    }

    return $result;
}

function p($var){
    echo '<pre>';
    print_r($var);
    echo '</pre><hr>';
}

?>







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

PM MAIL WWW ICQ   Вверх
ewolf
Дата 21.8.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

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



Так как речь идет о php 5, то возможно тебе поможет вот это
http://www.php.net/manual/ru/language.oop5.iterations.php

В этом случае можно, по крайней мере упростить пример Alone
PM MAIL ICQ   Вверх
Alone
Дата 21.8.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет. Существенно ничего не поменяется.
Вернее даже абсолютно ничего не поменяется, так как перебор в обоих случаях основан на foreach



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

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


Шустрый
*


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

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



Alone
Пример хорший, взял на заметку спасибо. Нафлужу 100 постов кину +
ewolf
Спасибо за ссылку(информативно и на русском) конечно проще, но у alone креативней smile тоже + кину, вот только нафлужу )

Добавлено @ 20:28 
Пока все не разбежались, хотелось бы узнать возможно ли заставить объект крутиться так же как массив, допустим вызовом того же array_map

Это сообщение отредактировал(а) jzZ - 21.8.2006, 20:29
PM MAIL   Вверх
Alone
Дата 22.8.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Пока все не разбежались, хотелось бы узнать возможно ли заставить объект крутиться так же как массив, допустим вызовом того же array_map


Э... недопонял...
Ты хочешь к свойствам объекта применить callback функцию?



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

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


Шустрый
*


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

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



Alone
Да, возможно ли?
PM MAIL   Вверх
skyboy
Дата 29.8.2006, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



[OFF]
jzZ, странные желания smile противоестественные smile
[/OFF]
Цитата(jzZ @  22.8.2006,  11:15 Найти цитируемый пост)
Да, возможно ли? 

Коль сам соберёшь массив свойств - так и обрабатывай его, как знаешь...
PM MAIL   Вверх
Alone
Дата 30.8.2006, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Да, возможно ли? 

Ну, как подсказывают выше, самым что ни на есть противоестественным путем smile
Перегоняешь объект в массив, применяешь к нему калбекфунк. а потом обратно перегоняешь массив в объект... 
Только вот  одно меня чешет: анакойхер это тебе надо? smile Ну просто зудит от любопыцва... smile


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

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


Шустрый
*


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

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



Alone
Ну может это покажется странным, но так... на досуге пробую изобрести какой-нибудь интересный метод кэширования на основе классов, вот заодно эксперементирую с ООп в php5
PM MAIL   Вверх
Opik
Дата 31.8.2006, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



А тут все просто. Есть такой интерфейс - ArrayAccess. Пользоваться им очень легко:
Код

  class Example implements ArrayAccess
  {
         protected $data       = array();
         function offsetUnset($offset)
         {
                   unset($this->data[$offset]);
         }

         function offsetGet($offset)
         {
                   return isset($this->data[$offset])? $this->data[$offset]: null;
         }

         function offsetExists($offset)
         {
                    return isset($this->data[$offset]);
         }

         function offsetSet($offset, $value)
         {
                    $this->data[$offset] = $value;
         }
}

$class = new Example;
$class['aaa'] = 'bbb';

PM MAIL Skype   Вверх
IZ@TOP
Дата 4.9.2006, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



jzZ, используй интерфейсы Iterator, ArrayAccess и у тебя все получится. 


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

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Extensions | Следующая тема »


 




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


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

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