关于 php静态变量的问题
程序员文章站
2022-05-04 09:19:44
...
今天想学习一下 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)操作;
上一篇: php实现以只读方式打开文件的方法,
下一篇: PHP获取访客IP和地理位置等信息的类