关于 php静态变量的问题
ringa_lee
ringa_lee 2017-04-10 16:50:22
[PHP讨论组]

今天想学习一下 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怎么实现调用类和函数的。不胜感激!

ringa_lee
ringa_lee

ringa_lee

全部回复(1)
PHP中文网

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号