关于static和self的一点疑问

关于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方法,都会执行到底。

不知道我的想法是否正确,还请老师帮忙分析一下!谢谢。

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

您好,如果子类中也声明了$_check,那么子类中操作的是子类中声明的$_check。一般父类中声明属性后子类中不会声明,如果是声明,那么则根据实际情况操作父类还是子类的属性。祝学习愉快!

  • a_agiao 提问者 #1
    我知道一般父类中声明属性后子类中不会声明,我只是说老师视频里写的不严谨
    2019-06-30 13:25:55
提问者 a_agiao 2019-06-30 00:20:44

第10行的 static 和第32、33行的self

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师