00001 <?php 00002 /*************************************************************************** 00003 * Copyright (C) 2006-2007 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 final class FetchStrategy extends Enumeration 00016 { 00017 const JOIN = 1; 00018 const CASCADE = 2; 00019 const LAZY = 3; 00020 00021 protected $names = array( 00022 self::JOIN => 'join', 00023 self::CASCADE => 'cascade', 00024 self::LAZY => 'lazy' 00025 ); 00026 00030 public function setId($id) 00031 { 00032 Assert::isNull($this->id, 'i am immutable one!'); 00033 00034 return parent::setId($id); 00035 } 00036 00040 public static function join() 00041 { 00042 return self::getInstance(self::JOIN); 00043 } 00044 00048 public static function cascade() 00049 { 00050 return self::getInstance(self::CASCADE); 00051 } 00052 00056 public static function lazy() 00057 { 00058 return self::getInstance(self::LAZY); 00059 } 00060 00064 private static function getInstance($id) 00065 { 00066 static $instances = array(); 00067 00068 if (!isset($instances[$id])) 00069 $instances[$id] = new self($id); 00070 00071 return $instances[$id]; 00072 } 00073 } 00074 ?>