$this в подфункциях метода

craz

Нестандартное звание
$lambda = function() {echo 'Hello World!';};
$lambda();

кстати не меньшее) я представляю что будет твориться скоро в стороннем коде у тех кто php c 5.3 начнет изучать.
 

craz

Нестандартное звание
да ну нет, просто не видел боевого сервака-хостинга в инете пока на борту чтоб стояла 5.3

-~{}~ 27.04.10 17:36:

ну один есть

http://www.diphost.ru/
 

Fortop

Новичок
видимо вот таким извратом?
Таким работать не будет из-за $this. Но мысль правильная
Объявляется все же функция, а не метод.


А насчет изврат или нет - к примеру, в JavaScript это обычная практика
PHP:
<?php
<?php
Interface Speaker {
    public function sayHello();
    public function sayOops();
}

class First implements Speaker
{
    public function sayHello()
    {
        echo 'Hello' . PHP_EOL;
    }

    public function sayOops()
    {
        echo 'Oops' . PHP_EOL;
    }
}

class Second implements Speaker
{
    public function sayHello()
    {
        echo 'Bye-bye' . PHP_EOL;
    }

    public function sayOops()
    {
        echo 'Wanna' . PHP_EOL;
    }
}

class My
{
    private $func = null;

    public function __construct(Speaker $speaker)
    {
        $closure = function($obj)
        {
            return function ($param) use ($obj)
            {
                $obj->$param();
            };
        };
        $this->func = $closure($speaker);
    }

    public function getClosure()
    {
        return $this->func;
    }
}

$a = new My(new First);
$b = new My(new Second);
$closure1 = $a->getClosure();
$closure2 = $b->getClosure();

$closure1('sayHello');
$closure2('sayOops');
 

craz

Нестандартное звание
Таким работать не будет из-за $this. Но мысль правильная
вообще то я проверяю код который "постю"))) можете сами проверить все работает

Вы код показываете php 5.3. я понимаю нельзя останавливать прогресс, но и такие куски кода, работать на любом хостинге будут не скоро
 

craz

Нестандартное звание
правильно зачем)))))))))

-~{}~ 27.04.10 18:17:

короче в качестве резюме:
надеюсь программистов использующих сложную логику в ущерб удобочитаемости и вообще удобству выловят и отстреляют, а vk я советовал бы подумать над тем как все это то, что мы обсудили написать проще и правильнее с точки зрения дзена, отстрел грядет)))))))))))
 

fixxxer

К.О.
Партнер клуба
Автор оригинала: craz
ну я в курсе, кто нить в продакшене ей(версией 5.3) пользуется? уже?
да
да ну нет, просто не видел боевого сервака-хостинга в инете пока на борту чтоб стояла 5.3
любой vps. они сейчас стоят столько, что вообще пропадает смысл в шареде.



тредстартеру советую поразмышлять над вопросом, зачем нужны приватные методы.
 

craz

Нестандартное звание
Автор оригинала: fixxxer
да

любой vps. они сейчас стоят столько, что вообще пропадает смысл в шареде.



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

vk

Новичок
Ладно, расширим пример:)
PHP:
if(CONDITION_1){
	if(CONDITION_2){
		if(CONDITION_3){
			//...
		}
		else DoSomething();
	}
	else if(CONDITION_4){
		if(CONDITION_5){
			//...
		}
		else DoSomething();
	}
	else DoSomething();
}
else DoSomething();
Вот такая вот логика.
Можно, конечно, скомпоновать условия и получится что-то вроде
PHP:
if(CONDITION_1 && ((CONDITION_2 && CONDITION_3) || (!CONDITION_2 && CONDITION_4 && CONDITION_5))){
	if(CONDITION_2 && CONDITION_3){
		//...
	}
	else{
		//...
	}
}
else DoSomething();
Но самое верхнее условие получится длиной в две строчки. Упростит ли это код? Вряд ли...

П.С. Но это уже пошел флейм, т.к. все-таки единственное решение - объявить функцию как private-метод.
 

Adelf

Administrator
Команда форума
vk
На твоем месте я бы задумался - а почему это функции так сильно нужен $this? Может быть, она так много знает о классе, что просто обязана быть его методом?
 

craz

Нестандартное звание
На твоем месте я бы задумался
задумываться не над этим по-моему скромному мнению, а над вот этой кашей

if(CONDITION_1){
if(CONDITION_2){
if(CONDITION_3){
//...
}
else DoSomething();
}
else if(CONDITION_4){
if(CONDITION_5){
//...
}
else DoSomething();
}
else DoSomething();
}
else DoSomething();

соответственно может и отпадет желание писать функции в методах.
 

Lightning

Трудоголик
if(CONDITION_1){
if(CONDITION_2){
if(CONDITION_3){
//...
}
else DoSomething();
}
else if(CONDITION_4){
if(CONDITION_5){
//...
}
else DoSomething();
}
else DoSomething();
}
else DoSomething();
Говновопрос:
PHP:
$done = false;
if( CONDITION_1 ) {
    if( CONDITION_2 ) {
        if( CONDITION_3 ) {
            //...
            $done = true;
        }
    }
    else if( CONDITION_4 && CONDITION_5 ){
        //...
        $done = true;
    }
}
if( !$done ) {
    //Do something
}
 

fixxxer

К.О.
Партнер клуба
ууу говнокодеры

метод надо выделять в подобных случаях
 

Вурдалак

Продвинутый новичок
Автор оригинала: vk
PHP:
if(CONDITION_1){
	if(CONDITION_2){
		if(CONDITION_3){
			//...
		}
		else DoSomething();
	}
	else if(CONDITION_4){
		if(CONDITION_5){
			//...
		}
		else DoSomething();
	}
	else DoSomething();
}
else DoSomething();
Exceptions?

-~{}~ 28.04.10 15:18:

Или я вообще тут не в теме? :)))
 
Сверху