pattern тайник

WMix

герр M:)ller
Партнер клуба
чет скушно мне было, придумал штуку, чтоб обьекты прятать :)

PHP:
class Covert{

    private $container;

    public function __construct( $obj ){
        $this->container = call_user_func_array(function( $a ){
            while(true) yield $a;
        }, [$obj]);
    }

    private function get(){
        foreach($this->container as $a){
            return $a;
        }
    }

    public function __get($name){
        return $this->get()->$name;
    }

    public function __set($name, $value){
        $this->get()->$name = $value;
    }

    public function __call($name, $arguments){
        return call_user_func_array([$this->get(), $name], $arguments);
    }
}
PHP:
$a = new class {
    public $a = 'hello';
    public function hello( $name ){
        return $this->a.' '.$name."\n";
    }
};

// прячем
$c = new Covert($a);
var_dump($c);

// используем
echo $c->hello('wmix');
$c->a = 'привет';
echo $c->hello('wmix');
 

AmdY

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

MiksIr

miksir@home:~$
А чем от прокси отличается?
Напиши еще туда генерацию phpdoc-а c сигнатурами методов на основе спрятанного класса.
 

WMix

герр M:)ller
Партнер клуба
Это и будет прокси, а че уже есть такое? :(
Я собирался интерфейс делать, ну в смысле еще не додумал..
 

fixxxer

К.О.
Партнер клуба
Чот не понял, зачем заморочка с yield. Чтобы никто не догадался, что там внутри? А просто closure с use недостаточно для этого?
 

WMix

герр M:)ller
Партнер клуба
Представь что у тебя на руках сущность (к примеру человек), ну и в процессе отлаживания ты дампишь ее. И вместо нормального человеческого языка ты видишь что аттрибут отец это прокси у которого есть ссылка на всякие мапперы, репы и база тоже там, такой дамп страниц на надцать... а по сути достаточно знать что это некая прокси, пусть с генератором. Ну те полезность исключительно в отладке на уровне домена.

У клозуры все опять навиду. Можно статический вызов влепить, но это же класс готовить придется

Те yield это и есть что пытался достигнуть, хоть через ж. Остальное так чтоб идею показать
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
я не могу понять какая может быть полезность в отладке на уровне _домена_ у этого

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

WMix

герр M:)ller
Партнер клуба
ну те ты никогда не дампишь данные? так абы интереса, просто чтоб прикинуть что там
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
про какие данные ты говоришь? я дамплю данные из базы в файл

содержимое полей объектов во время исполнения я смотрю, подключая PHPStorm к xdebug, дампить там ничего не надо
 

WMix

герр M:)ller
Партнер клуба
профайлинг, понятно. а я бывает по старинке из консольки нет нет да запущу.
 

WMix

герр M:)ller
Партнер клуба
нашел фишку получше :)

PHP:
class Covert{
   
    private $container;
   
    public function __construct( $obj ){
//         $this->container = call_user_func_array(function( $a ){
//             while(true) yield $a;
//         }, [$obj]);
        $this->container = $obj;
    }
   
//     private function get(){
//         foreach($this->container as $a){
//             return $a;
//         }
//     }
   
    // .. 
    public function __debugInfo() {
        return [];
    }
}
 
Сверху