00001 <?php 00002 /*************************************************************************** 00003 * Copyright (C) 2006-2008 by Konstantin V. Arkhipov * 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 00015 abstract class IdentifiablePrimitive 00016 extends PrimitiveInteger // parent class doesn't really matter here 00017 { 00018 protected $className = null; 00019 00024 protected $scalar = false; 00025 00026 abstract public function of($className); 00027 00031 public function setScalar($orly = false) 00032 { 00033 $this->scalar = ($orly === true); 00034 00035 return $this; 00036 } 00037 00042 public function setValue($value) 00043 { 00044 $className = $this->className; 00045 00046 Assert::isNotNull($this->className); 00047 00048 Assert::isTrue($value instanceof $className); 00049 00050 return parent::setValue($value); 00051 } 00052 00053 protected static function guessClassName($class) 00054 { 00055 if (is_string($class)) 00056 return $class; 00057 elseif (is_object($class)) { 00058 if ($class instanceof Identifiable) 00059 return get_class($class); 00060 elseif ($class instanceof GenericDAO) 00061 return $class->getObjectName(); 00062 } 00063 00064 throw new WrongArgumentException('strange class given - '.$class); 00065 } 00066 00067 public function exportValue() 00068 { 00069 if (!$this->value) 00070 return null; 00071 00072 return $this->value->getId(); 00073 } 00074 00075 /* void */ protected function checkNumber($number) 00076 { 00077 if ($this->scalar) 00078 Assert::isScalar($number); 00079 else 00080 Assert::isInteger($number); 00081 } 00082 00083 protected function castNumber($number) 00084 { 00085 if (!$this->scalar && Assert::checkInteger($number)) 00086 return (int) $number; 00087 00088 return $number; 00089 } 00090 } 00091 ?>