关于static和self的一点疑问
<?php
class GDBasic
{
protected static $_check =false;
//检查服务器环境中gd库
public static function check()
{
//当静态变量不为false
if(static::$_check)
{
return true;
}
//检查gd库是否加载
if(!function_exists("gd_info"))
{
throw new \Exception('GD is not exists');
}
//检查gd库版本
$version = '';
$info = gd_info();
if(preg_match("/\\d+\\.\\d+(?:\\.\\d+)?/", $info["GD Version"], $matches))
{
$version = $matches[0];
}
//当gd库版本小于2.0.1
if(!version_compare($version,'2.0.1','>='))
{
throw new \Exception("GD requires GD version '2.0.1' or greater, you have " . $version);
}
self::$_check = true;
return self::$_check;
}
}老师好,我个人感觉,严格来讲,第10行的 static 和第31、31行的self,应该保持一致。
因为static与self的差异,假如继承GDBasic的子类中,也声明了一个静态变量$_check,并且多次调用check方法(虽然这种操作可能性不大),那么第10-13行的判断将失去意义,每次调用check方法,都会执行到底。
不知道我的想法是否正确,还请老师帮忙分析一下!谢谢。
1
收起
正在回答
2回答
您好,如果子类中也声明了$_check,那么子类中操作的是子类中声明的$_check。一般父类中声明属性后子类中不会声明,如果是声明,那么则根据实际情况操作父类还是子类的属性。祝学习愉快!
PHP常用技术与ThinkPHP5框架开发
- 参与学习 人
- 提交作业 225 份
- 解答问题 3372 个
掌握用PHP开发互联网网站的必备功能,掌握当下主流的Linux系统开发,并熟练使用热门框架ThinkPhp开发电商团购项目,是通向PHP工程师必经之路。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星