loggerrenderermap.php.svn-base
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 187 行
SVN-BASE
187 行
<?php/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * * @package log4php * @subpackage or *//** * @ignore */if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..'); /** */require_once(LOG4PHP_DIR . '/or/LoggerDefaultRenderer.php');require_once(LOG4PHP_DIR . '/or/LoggerObjectRenderer.php');require_once(LOG4PHP_DIR . '/LoggerLog.php');/** * Map class objects to an {@link LoggerObjectRenderer}. * * @author Marco Vassura * @version $Revision: 635069 $ * @package log4php * @subpackage or * @since 0.3 */class LoggerRendererMap { /** * @var array */ var $map; /** * @var LoggerDefaultRenderer */ var $defaultRenderer; /** * Constructor */ public function __construct() { $this->map = array(); $this->defaultRenderer = new LoggerDefaultRenderer(); } /** * Add a renderer to a hierarchy passed as parameter. * Note that hierarchy must implement getRendererMap() and setRenderer() methods. * * @param LoggerHierarchy $repository a logger repository. * @param string $renderedClassName * @param string $renderingClassName * @static */ public static function addRenderer($repository, $renderedClassName, $renderingClassName) { LoggerLog::debug("LoggerRendererMap::addRenderer() Rendering class: [{$renderingClassName}], Rendered class: [{$renderedClassName}]."); $renderer = LoggerObjectRenderer::factory($renderingClassName); if($renderer == null) { LoggerLog::warn("LoggerRendererMap::addRenderer() Could not instantiate renderer [{$renderingClassName}]."); return; } else { $repository->setRenderer($renderedClassName, $renderer); } } /** * Find the appropriate renderer for the class type of the * <var>o</var> parameter. * * This is accomplished by calling the {@link getByObject()} * method if <var>o</var> is object or using {@link LoggerDefaultRenderer}. * Once a renderer is found, it is applied on the object <var>o</var> and * the result is returned as a string. * * @param mixed $o * @return string */ public function findAndRender($o) { if($o == null) { return null; } else { if (is_object($o)) { $renderer = $this->getByObject($o); if ($renderer !== null) { return $renderer->doRender($o); } else { return null; } } else { $renderer = $this->defaultRenderer; return $renderer->doRender($o); } } } /** * Syntactic sugar method that calls {@link PHP_MANUAL#get_class} with the * class of the object parameter. * * @param mixed $o * @return string */ public function getByObject($o) { return ($o == null) ? null : $this->getByClassName(get_class($o)); } /** * Search the parents of <var>clazz</var> for a renderer. * * The renderer closest in the hierarchy will be returned. If no * renderers could be found, then the default renderer is returned. * * @param string $class * @return LoggerObjectRenderer */ public function getByClassName($class) { $r = null; for($c = strtolower($class); !empty($c); $c = get_parent_class($c)) { if (isset($this->map[$c])) { return $this->map[$c]; } } return $this->defaultRenderer; } /** * @return LoggerDefaultRenderer */ public function getDefaultRenderer() { return $this->defaultRenderer; } public function clear() { $this->map = array(); } /** * Register a {@link LoggerObjectRenderer} for <var>clazz</var>. * @param string $class * @param LoggerObjectRenderer $or */ public function put($class, $or) { $this->map[strtolower($class)] = $or; } /** * @param string $class * @return boolean */ public function rendererExists($class) { $class = basename($class); if (!class_exists($class)) { include_once(LOG4PHP_DIR ."/or/{$class}.php"); } return class_exists($class); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?