> 백엔드 개발 > PHP 튜토리얼 > 新写的类工厂函数

新写的类工厂函数

WBOY
풀어 주다: 2016-06-13 13:51:32
원래의
945명이 탐색했습니다.

新写的类工厂函数,请指教

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?php /** 
 * 中文名称     类创建工厂
 * 
 * 功能描述     实例化类,支持类构造函数多参数功能
 *  
 * @author        魔力一生缘 moliyishengyuan@126.com
 * @package        Lib
 */ 
class ClsFactory {
    /**
     * 创建类对象
     *
     * @param string    $classInfo        类信息
     * @param mixed        $param1            类构造函数参数1,可选
     * @param mixed        $param2            类构造函数参数2,可选
     * ……
     * 
     * @return object | FALSE
     */
    public static function create() {
        // 从参数中获取类信息和类构造函数参数
        $args = func_get_args();
        if (count($args) <= 0) {
            return FALSE;
        }
        
        // 类信息,此处类信息格式为model::Test,对应/model/Test.php文件中的Test类
        $classInfo = array_shift($args);
        $params       = $args;
        
        // 类创建函数实体
        self::_createMain($classInfo, $params);
    }

    /**
     * 创建类主体函数
     *
     * @param array        $classInfo        类信息
     * @param array        $params            类构造函数参数
     * 
     * @return object | FALSE
     */
    private static function _createMain($classInfo, $params) {
        $className = array_pop($classInfo);
        $classPath = SERVER_ROOT . implode('/', $classInfo). '/' . $className . '.php';

        if (!class_exists($className)) {
            include_once $classPath;
        }
        if (!class_exists($className)) {
            return FALSE;
        }
        
        // 通过反射创建类的映射
        $ref = new ReflectionClass($className);
        if ($ref->hasMethod('__construct') && !empty($params)) {
            $obj = $ref->newInstanceArgs($params);  
        } else {  
            $obj = $ref->newInstance();  
        }
        
        return $obj;
    }
}
?>

로그인 후 복사


------解决方案--------------------
这个做什么用?看起来只是起了一个autoloader的作用?
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿