|
|
|
|
|
для: qquery
(21.03.2007 в 15:02)
| | да.. еще в довесок... а с какого перепугу ОБРАБОТЧИКИ метода не могут получить в качестве параметра "указатель" на объект класса =))) (это касательно "не имеют доступа к свойствам класса") ?
Еще раз про баластные методы =))) - в ЛЮБОМ случае Вы будете ВСЕ методы прописывать текстом, чтобы потом создать тело функции и никуда от этого не деться =), так что баластными их назвать никак нельзя =))).
И уж тем более "логично использовать условное определение функции" - это Ваше ЧИСТО СУБЬЕКТИВНОЕ мнение. | |
|
|
|
|
|
|
|
для: qquery
(21.03.2007 в 15:02)
| | Понятно. Только я бы стал использовать один метод и проверял бы его параметры и взависимости от параметров, делал бы что-либо.
Например,
<?
class test
{
public function DoIt($param)
{
$this->content($param);
}
private function content($param)
{
if($param == 1)
echo 'test 1';
else
echo 'test 2';
}
}
$wow = new test();
$wow->DoIt(0);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(21.03.2007 в 15:05)
| | Спасибо | |
|
|
|
|
|
|
|
для: qquery
(21.03.2007 в 13:50)
| | Если вам требуется вызывать из объекта метод с произвольным именем перегрузите специальный метод класса __call() - первый параметр имя динамического метода, второй - массив его параметров. | |
|
|
|
|
|
|
| Подобное нужно для следующего.
Создается коллекция экземпляров объектов. Много объектов.
В зависимости от того, на каких начальных условиях создается экземпляр отдельные методы должны иметь свой обработчик. Вместо того, чтобы в каждый экземпляр включать кучу балластных методов, как было в первом совете, логично использовать условное определение функции. Что сто лет как есть в РНР. Просто возможно есть тонкости.
А статические методы абсолютно не устраивают, поскольку не имеют доступа к свойствам класса . | |
|
|
|
|
|
|
|
для: ZuArt
(21.03.2007 в 14:03)
| | Это не решение проблемы.
Это выход, временный но... не то...
Если работает без ООП, то должна быть возможность работать нормальное динамическое определение функции и с ООП. Да и не хочу я тратить память на десятки функций в памяти если мне реально нужна только одна. | |
|
|
|
|
|
|
|
для: qquery
(21.03.2007 в 13:50)
| | Естественно, что функция content() не будет членом класса.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: qquery
(21.03.2007 в 13:50)
| | как вариант - не парить мозги себе и сделать просто 3 функции класса и точно так же спокойно вызывать ф-цию content как члена класса
content ()
{
if (условие)
return $this->content1();
else
return $this->content2();
}
function content1()
...
function content2()
...
|
| |
|
|
|
|
|
|
| Народ, хелп!
Вопрос к тем, кто имеет большой опыт в ООП PHP.
Есть книжный пример того, как можно динамически ДАВАТЬ ОПРЕДЕЛЕНИЕ функции, например:
<?php
function test($a)
{
if(1==$a)
{
function wow()
{
echo 'Definition1';
return;
}
}
else
{
function wow()
{
echo 'Definition2';
return;
}
}
return;
}
test(0);
wow();
?>
Все прекрасно работает
Если же работаем с объектами, то
<?php
class test
{
function __construct()
{
return;
}
function __destruct()
{
return;
}
function init($flag)
{
if(1==$flag)
{
function content()
{
echo 'Definition1';
return;
}
}
else
{
function content()
{
echo 'Definition2';
return;
}
}
return;
}
function run()
{
$this->content();
return;
}
}
$wow = new test();
$wow->init(0);
$wow->run();
?>
То не работает, потому как функция CONTENT() частью класса не считается.
К ней можно обратиться только если сделать так:
function run()
{
content();
return;
}
Но мне нужно чтобы функция CONTENT() была функцией-членом класса.
Как быть? | |
|
|
|
|