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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое добавление функций в объект 
V
    Опции темы
Diabolus
  Дата 3.9.2008, 03:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Начну сразу с кода, ибо уже 4 часа и словами описать будет сложновато.
Код

class myclass {
  function myfunc($myarr){
    $myarr=array("val1"=>"blah1","val2"=>"blah2");
    $obj = new myobject($myarr); // Первый вариант
    $obj2 = createobj($myarr); // Второй вариант
    echo $obj->_val1(); // Первый вариант
    echo $obj2->_val1(); // Второй вариант
  }
}

Нужно чтоб либо первый, либо второй вариант выводил текст "blah1".
То есть мы либо создаём объект через функцию, передаём ей массив, и она добавляет в него одноимённую (т.е. слегка изменённую) функцию, либо вписываем в объект параметры, а он уже как-то сам разбирается с функциями (но, имхо, это не очень реально). Приветствуются и любые другие способы, главное - результат. Условие лишь одно: без привлечения runkit или иных библиотек.
Иначе сделать не могу, т.к. исправляю/дописываю крупный проект, который, судя по всему, написан при помощи генератора, либо жесточайшим индусом, и если переписать функцию таким образом, чтобы она возвращала $obj1->val1, придётся переписывать ещё сотню-другую функций.
Найти, где и как это реализовано в самом проекте, не удалось.

Это сообщение отредактировал(а) Diabolus - 12.5.2010, 09:51
PM MAIL   Вверх
sTa1kEr
Дата 3.9.2008, 03:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


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

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



Добавляешь в класс myobject магический метод __call и в через этот метод возращешь нужные значения.
Код

class myobject
{
    private $array = array();
    
    public function __construct($array)
    {
        $this->array = $array;
    }
    
    public function __call($name, $args)
    {
        return (isset($this->array['_'.$name]) ? $this->array['_'.$name] : null );
    }
}


PM MAIL   Вверх
Diabolus
Дата 3.9.2008, 03:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое :)
Ещё не проверил, но, кажется, именно это мне и нужно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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