关于 php静态变量的问题

原创
2016-06-06 20:17:48 863浏览

今天想学习一下 phpcms, 然后就看了一下源代码,但是在 看 _load_class 这个方法的时候有点疑问。

/**
     * 加载类文件函数
     * @param string $classname 类名
     * @param string $path 扩展地址
     * @param intger $initialize 是否初始化
     */
    private static function _load_class($classname, $path = '', $initialize = 1) {
        static $classes = array();

        if (empty($path)) $path = 'libs'.DIRECTORY_SEPARATOR.'classes';

        $key = md5($path.$classname);
        if (isset($classes[$key])) {
            if (!empty($classes[$key])) {
                return $classes[$key];
            } else {
                return true;
            }
        }
        if (file_exists(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
            include PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php';
            $name = $classname;
            if ($my_path = self::my_path(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
                include $my_path;
                $name = 'MY_'.$classname;
            }
            if ($initialize) {
                $classes[$key] = new $name;
            } else {
                $classes[$key] = true;
            }
            return $classes[$key];
        } else {
            return false;
        }
    }

static $classes = array(); 如果没有加上static 属性的话就是申明了一个空数组,是不是加上 static之后,第多次调用之后这个数组的值其实是上一次改变之后的值?我没明白他是如何将值存入这个$classes 数组里面的,求解。或者有熟悉的朋友讲解一下phpcms怎么实现调用类和函数的。不胜感激!

回复内容:

今天想学习一下 phpcms, 然后就看了一下源代码,但是在 看 _load_class 这个方法的时候有点疑问。

/**
     * 加载类文件函数
     * @param string $classname 类名
     * @param string $path 扩展地址
     * @param intger $initialize 是否初始化
     */
    private static function _load_class($classname, $path = '', $initialize = 1) {
        static $classes = array();

        if (empty($path)) $path = 'libs'.DIRECTORY_SEPARATOR.'classes';

        $key = md5($path.$classname);
        if (isset($classes[$key])) {
            if (!empty($classes[$key])) {
                return $classes[$key];
            } else {
                return true;
            }
        }
        if (file_exists(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
            include PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php';
            $name = $classname;
            if ($my_path = self::my_path(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
                include $my_path;
                $name = 'MY_'.$classname;
            }
            if ($initialize) {
                $classes[$key] = new $name;
            } else {
                $classes[$key] = true;
            }
            return $classes[$key];
        } else {
            return false;
        }
    }

static $classes = array(); 如果没有加上static 属性的话就是申明了一个空数组,是不是加上 static之后,第多次调用之后这个数组的值其实是上一次改变之后的值?我没明白他是如何将值存入这个$classes 数组里面的,求解。或者有熟悉的朋友讲解一下phpcms怎么实现调用类和函数的。不胜感激!

第一次调用,static $classes = array() 初始化$classes静态变量后,在内存中就有一个地址(假设为0x123),只要php脚本没有终止,下次再调用static $classes = array()并不会再次初始化$classes;之后对$classes所有操作都是对这个地址(0x123)操作;

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。