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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создать метод в классе 
:(
    Опции темы
bars80080
Дата 28.1.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



что-то я затупил, как по ходу создать метод в классе

Код

class cls {
    
    function func1($name, $var) {
        
        // что-то
    }
}

$per = new cls();
$per->func1('param', 'value');

echo $per->param; // вывести value

как создать метод в классе по переданным параметрам
PM MAIL WWW   Вверх
oksale
Дата 28.1.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

class cls {
    
    function func1($name, $var) {
        $param = 0;
        // ...
        return $param;
    }
}
$per = new cls();
$param = $per->func1('param', 'value');
echo $param; // вывести value


Или:
Код

class cls {
    private $param;

    function func1($name, $var) {
        $param=0;
        // ...
        $this->param=$param;
    }

    function getParam(){
        return $this->param;
    }
}
$per = new cls();
$per->func1('param', 'value');
echo $per->getParam(); // вывести value


--------------------
WBR, oksale
PM MAIL ICQ   Вверх
pizzz
Дата 28.1.2009, 13:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я если честно о таком не слышал. Может быть Вы поведаете зачем Вам это, а я и сообщество постараемся предложить более красивый результат?
--------------------
Спасибо много, жмем кнопку репутация.  Извините меня за орфографические ошибки, я стараюсь не ошибаться, а они все равно просачиваются гады.     
PM MAIL ICQ   Вверх
krundetz
Дата 28.1.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

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



bars80080, тебе видимо магический метод __call() нужен, либо я тебя понял неправильно


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
bars80080
Дата 28.1.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



oksale, и что это вы мне написали?


pizzz, фишка в том, что есть в коде много всяких среднепостоянных данных. всякие массивы типа: 'Низкая','Обычная','Высокая' или 'Входящие документы', 'Исходящие документы', 'Внутренние документы', переменные имеющие важное значение и прочее

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

конечно можно было бы:

Код
class cls {
    
    var $a = array();
    function func1($name, $ar = array()) {
        
        $this->a[$name] = $ar;
        $c = count($ar);
        $this->a['count'.$name] = $c;
        
    }
}
но это удлинение. хотелось бы сразу свойство

Добавлено через 26 секунд
Цитата(krundetz @  28.1.2009,  12:35 Найти цитируемый пост)
тебе видимо магический метод __call() нужен, либо я тебя понял неправильно 

а как им пользоваться?
PM MAIL WWW   Вверх
enof
Дата 28.1.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



del

Это сообщение отредактировал(а) enof - 28.1.2009, 13:51
PM MAIL ICQ Skype   Вверх
Sentox
Дата 28.1.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


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

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



Цитата

а как им пользоваться?

http://phpclub.ru/faq/PHP5/Overload
http://ua.php.net/oop5.overloading

Это сообщение отредактировал(а) Sentox - 28.1.2009, 14:52
PM MAIL   Вверх
bars80080
Дата 28.1.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



блин, по голове хочется стукнуть копипастчикам

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

вот здесь в комментариях человек нормально объясняет: http://www.softtime.ru/forum/read.php?id_f...;id_theme=21195

итог выглядет примерно так:
Код
class cls {
    
    var $member;
    function qw() {
        echo 'wert<br />';
    }
    function __set($name, $value) {
        
        $this->member[$name] = $value;
        $c = count($value);
        $this->member['count'.$name] = $c;
        
    }
    function __get($name) {
        
        if(isset($this->member[$name])) return $this->member[$name];
        else return false;
    }
}
$per = new cls();
$param = $per->__set('param', array('value','erty','dfjdfhj'));
$per->qw();
var_dump($per->param); 
echo $per->countparam;





тогда последовательный вопрос: как оно к ресурсам и прочая, не является ли это чем-нибудь страшным для сервера (скажем накидать 20-50 новых свойств)?
PM MAIL WWW   Вверх
IZ@TOP
Дата 28.1.2009, 17:24 (ссылка) |   (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



bars80080, советую сформулировать задачу в более конкретном виде, потому, как не совсем ясно, какие именно цели вы преследуете.

20-50, 100-500 свойств, не столь важно. Важнее не хранить эти данные постоянно, если они вам уже не нужны. Т.е. использовать их в пределах видимости того функционала, который непосредственно в этих данных нуждается, а при необходимости - тереть из глобального массива. Но, не зная задачи, точно не могу сказать какой подход Вам больше всего подойдет.

P.S. Возможно, что-то в этом роде вам пригодится.

Это сообщение отредактировал(а) IZ@TOP - 28.1.2009, 17:25


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

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
bars80080
Дата 28.1.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



ну как цели?

фишка в том, что я говорю о своего рода модуле. обычно это система какого-то документооброта. пользователь что-то вносит, кто-то другой смотрит, корректирует записи. т.е. это не сайт в привычном понимании этого слова.
делая третий подобный модуль, конечно начинаешь подмечать общие черты и хочется оптимизировать до создания универсальной системы. появляются классы основных событий и прочая

среди них есть стандартный набор разнородных элементов. это массивы падающих списков, заголовки, какие-то другие перечисления постоянно встречающиеся при использовании этого модуля, но встречающиеся только в нём. далее какие-то параметры, которые хотелось бы настраивать из профиля пользователя, как-то количество строчек в таблицах или цветовые решения скина
в итоге это всё это находится именно разнородным мессивом, пока ещё в начале скрипта. массивы скажем в виде $arrayListSomeValues, что-то точно постоянное задано в виде констант LIMIT, которые инициализируются в начале работы, имена таблиц. может ещё какие-то данные.

понятное дело, что это всё легко заносится в какой-нибудь include('variableConf.php'); может иметь такой же вид, как реплики для языка:
$lang['yes'] = 'да'; $lang['no'] = 'нет';
но тут возникает мысль запихать всё это в класс по нескольким причинам:
1. одновременный доступ. к примеру, теперь нам для построения самой страницы, которая тоже строится из класса расписывающего логику этой страницы, не требуется передавать кучу внешних параметров через аргументы методов или global в них же. достаточно объявить всего одно имя класса, и он станет виден
2. можно без помех пользоваться разными именами переменными не затерёшь какую-то из них, которая может использоваться ранее и следовать через весь скрипт. что весьма актуально при возвращении к проету спустя полгода
3. обратное от п.1 можно добавить в класс переменную без return или global и она станет видна всему последующему скрипту.
4. одно из важнейших свойств - автоматизация и обработка. на примере того же массива. добавляем массив значений, а там автоматом выкидываютс дублирующие записи, может упорядочиваются по некоторому критерию и появляются готовые характеристики, которые не придётся более вычислять

как-то так

единственная причина почему хочется не $P->perem['param'][5]; а $P->param[5] - просто удобней
потому и вопрос, не страшно ли это?
PM MAIL WWW   Вверх
Sentox
Дата 28.1.2009, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


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

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



а массив в классе получается виден из внешней программы.
Может класс Collection
http://www.computerra.ru/softerra/program/10311/
PM MAIL   Вверх
awers
Дата 28.1.2009, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



//offtop Прошу кого нибудь поставить плюсик посту товарища IZ@TOP`а. Листал форум, случайно кликнул на минус

Это сообщение отредактировал(а) awers - 28.1.2009, 23:34
PM MAIL WWW ICQ Skype   Вверх
bars80080
Дата 28.1.2009, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



awers, так оно не защитывается, если комментарий не введёшь и дальше кнопку отправить не нажмёшь

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


Эксперт
***


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

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



на посте я имел в виду ) а то мысль хорошая, а минус сверху. не порядок
PM MAIL WWW ICQ Skype   Вверх
krundetz
Дата 29.1.2009, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

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



Цитата(bars80080 @  28.1.2009,  13:46 Найти цитируемый пост)
а как им пользоваться? 

почти также как с __set только вызов будет не
Код

$obj->param1 = value1;

а
Код

$obj->method1(argument1, argument2[,argument3,...]);

и соответственно тем что при __set у тебя приходит один параметр, а при __call приходит массив аргументов

если не уловил разницу пиши завтра вечером напишу простенький пример, точнее уже сегодне

и объясни пожалуйста зачем ты здесь:
Код

$param = $per->__set('param', array('value','erty','dfjdfhj'));

делаешь явный вызов метода __set, когда весь его смысл в том что он вызывается неявно, тоесть в твоем случае так:
Код

$value = array('value','erty','dfjdfhj')
$per->param = $value;

а также интересно зачем ты пытаешься присвоит переменной $param значение возврашаемое методом, при том что он у тебя ничего не возвращает?

Это сообщение отредактировал(а) krundetz - 29.1.2009, 03:21


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
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.0802 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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