Показать сообщение отдельно

  #5  
Старый 20.01.2017, 21:55
t0ma5
Постоянный
Регистрация: 10.02.2012
Сообщений: 830
Провел на форуме:
300820

Репутация: 90


По умолчанию

Цитата:
Сообщение от crlf  

У меня в тестовом скрипте жёсткая каша, хрен разберёшь
Побыстрому накидал небольшой скрипт для вызова
__get/__set,
надеюсь разберёшься:
Spoiler
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]map[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$map[/COLOR][COLOR="#007700"];
[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]realObject[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$realObject[/COLOR][COLOR="#007700"];
}

public function
[/COLOR][COLOR="#0000BB"]__set[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$value[/COLOR][COLOR="#007700"]) { }

public function
[/COLOR][COLOR="#0000BB"]__get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]) { }

public function
[/COLOR][COLOR="#0000BB"]offsetExists[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]) {
return isset([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]map[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]]);
}

public function
[/COLOR][COLOR="#0000BB"]offsetUnset[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]) {
throw new[/COLOR][COLOR="#0000BB"]Exception[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'Not supported !'[/COLOR][COLOR="#007700"]);
}

public function
[/COLOR][COLOR="#0000BB"]offsetSet[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$value[/COLOR][COLOR="#007700"]) {
return[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]__set[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$value[/COLOR][COLOR="#007700"]);
}

public function
[/COLOR][COLOR="#0000BB"]offsetGet[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]) {
return[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]__get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]);
}
}
class[/
COLOR][COLOR="#0000BB"]Debug[/COLOR][COLOR="#007700"]{
private[/COLOR][COLOR="#0000BB"]$debugStateName[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'flag'[/COLOR][COLOR="#007700"];
private[/COLOR][COLOR="#0000BB"]$_instance[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'ccc'[/COLOR][COLOR="#007700"];
}
class[/
COLOR][COLOR="#0000BB"]User[/COLOR][COLOR="#007700"]extends[/COLOR][COLOR="#0000BB"]GenericMapper[/COLOR][COLOR="#007700"]{

private
[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'aaa'[/COLOR][COLOR="#007700"];
private[/COLOR][COLOR="#0000BB"]$id[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'bbb'[/COLOR][COLOR="#007700"];

public function
[/COLOR][COLOR="#0000BB"]__construct[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$realObject[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$map[/COLOR][COLOR="#007700"]) {
[/
COLOR][COLOR="#0000BB"]parent[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]__construct[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$realObject[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$map[/COLOR][COLOR="#007700"]);
}
}
class[/
COLOR][COLOR="#0000BB"]Session[/COLOR][COLOR="#007700"]{ }
[/
COLOR][COLOR="#0000BB"]$o[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]Session[/COLOR][COLOR="#007700"];
[/
COLOR][COLOR="#0000BB"]$o[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]user[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]User[/COLOR][COLOR="#007700"](new[/COLOR][COLOR="#0000BB"]Debug[/COLOR][COLOR="#007700"], array([/COLOR][COLOR="#DD0000"]'name'[/COLOR][COLOR="#007700"]=> array([/COLOR][COLOR="#DD0000"]'type'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'function'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'target'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'showNice'[/COLOR][COLOR="#007700"])));
echo[/
COLOR][COLOR="#DD0000"]"\n__get:\n"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]urlencode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]base64_encode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]serialize[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$o[/COLOR][COLOR="#007700"]))).[/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"];
[/
COLOR][COLOR="#0000BB"]$o[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]User[/COLOR][COLOR="#007700"](new[/COLOR][COLOR="#0000BB"]Debug[/COLOR][COLOR="#007700"], array([/COLOR][COLOR="#DD0000"]'user'[/COLOR][COLOR="#007700"]=> array([/COLOR][COLOR="#DD0000"]'type'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'function'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'target'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'showNice'[/COLOR][COLOR="#007700"])));
echo[/
COLOR][COLOR="#DD0000"]"\n__set:\n"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]urlencode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]base64_encode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]serialize[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$o[/COLOR][COLOR="#007700"]))).[/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"];
[/
COLOR][COLOR="#0000BB"]?>
[/COLOR][/COLOR] 
подебажил

для __set не передается класс Session поэтому отрабатывает это условие

Код:
if (!isset($sess->user)) {
            $sess->user = new User();
            $sess->save();
        }
крут что сказать я не додумался до этого

правда туда всегда передаётся объект User...

честно говоря пока сам в режиме рандома -_-
 
Ответить с цитированием