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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Условное определение функции в ООП
 
 автор: 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() была функцией-членом класса.

Как быть?

   
 
 автор: 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 в 14:17)   письмо автору
 
   для: ZuArt   (21.03.2007 в 14:03)
 

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

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

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

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

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

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

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

Спасибо

   
Rambler's Top100
вверх

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