Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Условное определение функции в ООП

Сообщения:  [1-9] 

 
 автор: ZuArt   (21.03.2007 в 15:21)   письмо автору
 
   для: qquery   (21.03.2007 в 15:02)
 

да.. еще в довесок... а с какого перепугу ОБРАБОТЧИКИ метода не могут получить в качестве параметра "указатель" на объект класса =))) (это касательно "не имеют доступа к свойствам класса") ?

Еще раз про баластные методы =))) - в ЛЮБОМ случае Вы будете ВСЕ методы прописывать текстом, чтобы потом создать тело функции и никуда от этого не деться =), так что баластными их назвать никак нельзя =))).

И уж тем более "логично использовать условное определение функции" - это Ваше ЧИСТО СУБЬЕКТИВНОЕ мнение.

   
 
 автор: t4f   (21.03.2007 в 15:08)   письмо автору
 
   для: 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);
?>

   
 
 автор: qquery   (21.03.2007 в 15:07)   письмо автору
 
   для: cheops   (21.03.2007 в 15:05)
 

Спасибо

   
 
 автор: cheops   (21.03.2007 в 15:05)   письмо автору
 
   для: qquery   (21.03.2007 в 13:50)
 

Если вам требуется вызывать из объекта метод с произвольным именем перегрузите специальный метод класса __call() - первый параметр имя динамического метода, второй - массив его параметров.

   
 
 автор: qquery   (21.03.2007 в 15:02)   письмо автору
 
 

Подобное нужно для следующего.
Создается коллекция экземпляров объектов. Много объектов.
В зависимости от того, на каких начальных условиях создается экземпляр отдельные методы должны иметь свой обработчик. Вместо того, чтобы в каждый экземпляр включать кучу балластных методов, как было в первом совете, логично использовать условное определение функции. Что сто лет как есть в РНР. Просто возможно есть тонкости.
А статические методы абсолютно не устраивают, поскольку не имеют доступа к свойствам класса .

   
 
 автор: qquery   (21.03.2007 в 14:17)   письмо автору
 
   для: ZuArt   (21.03.2007 в 14:03)
 

Это не решение проблемы.
Это выход, временный но... не то...
Если работает без ООП, то должна быть возможность работать нормальное динамическое определение функции и с ООП. Да и не хочу я тратить память на десятки функций в памяти если мне реально нужна только одна.

   
 
 автор: t4f   (21.03.2007 в 14:13)   письмо автору
 
   для: qquery   (21.03.2007 в 13:50)
 

Естественно, что функция content() не будет членом класса.

[поправлено модератором]

   
 
 автор: ZuArt   (21.03.2007 в 14:03)   письмо автору
 
   для: qquery   (21.03.2007 в 13:50)
 

как вариант - не парить мозги себе и сделать просто 3 функции класса и точно так же спокойно вызывать ф-цию content как члена класса

content ()
{
if (условие)
 return $this->content1();
else
 return $this->content2();
}

function content1()
...
function content2()
...

   
 
 автор: qquery   (21.03.2007 в 13:50)   письмо автору
 
 

Народ, хелп!
Вопрос к тем, кто имеет большой опыт в ООП 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() была функцией-членом класса.

Как быть?

   

Сообщения:  [1-9] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования