ScopeSetter.class.php

Go to the documentation of this file.
00001 <?php
00002 /***************************************************************************
00003  *   Copyright (C) 2007 by Ivan Y. Khvostishkov                            *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU Lesser General Public License as        *
00007  *   published by the Free Software Foundation; either version 3 of the    *
00008  *   License, or (at your option) any later version.                       *
00009  *                                                                         *
00010  ***************************************************************************/
00011 
00012     final class ScopeSetter extends PrototypedSetter
00013     {
00014         private $getter = null;
00015         
00016         public function __construct(EntityProto $proto, &$object)
00017         {
00018             Assert::isArray($object);
00019             
00020             return parent::__construct($proto, $object);
00021         }
00022         
00023         public function set($name, $value)
00024         {
00025             if (!isset($this->mapping[$name]))
00026                 throw new WrongArgumentException(
00027                     "knows nothing about property '{$name}'"
00028                 );
00029             
00030             Assert::isTrue(!is_object($value), 'cannot put objects into scope');
00031             
00032             $primitive = $this->mapping[$name];
00033             
00034             $this->object[$primitive->getName()] =  $value;
00035             
00036             return $this;
00037         }
00038         
00042         public function getGetter()
00043         {
00044             if (!$this->getter) {
00045                 $this->getter = new ScopeGetter($this->proto, $this->object);
00046             }
00047             
00048             return $this->getter;
00049         }
00050     }
00051 ?>