• 技术文章 >后端开发 >php教程

    PHP中什么是静态?深入了解静态属性和静态方法

    青灯夜游青灯夜游2021-07-09 19:25:05转载609
    本篇文章带大家了解一下PHP中的静态属性和静态方法,介绍一下静态的本质、静态变量和普通变量的区别,希望对大家有所帮助。

    静态是什么?

    我们之前讲到, 调用成员变量和方法, 都需要用到对象. 但如果我们不想实例化, 直接访问变量和方法呢? 这就用到了静态static功能.

    在定义变量和方法的时候, 在前面加上static关键词, 就转化为了静态, 就可以通过类名::双引号直接进行访问.

    我们继续将上面的例子改写为静态变量和静态方法:

    class Classname          //定义一个类, 类名不区分大小写
    {
    static public $name;      //定义静态成员变量;
    static public $height=180;    //初始化赋值
    static public $weight, $nationality; //可以一个语句定义多个变量
    static protected $age;
    
    static public function player($name,$height, $weight, $age, $sex)
    {                    //定义静态成员方法, 以及方法形参
        self::$name=$name;                 //为成员变量赋值, 使用了代词self::
        self::$weight=$weight;
        self::$height=$height;
    
        if (self::$height<185 && self::$weight<=85){
            return self::$name.',符合要求';
        }else{
            return self::$name.',不太行';
        }
    }
    }
    echo Classname::$height;              //180, 通过类名::访问静态变量
    echo Classname::player('xiaoming',180,80,22, 'Male');  //通过类名::访问静态方法;

    上面的例子可以注意到, 我将所有的$this都换成了self. 因为$this指代的是调用对象, 而self指代的方法所在的类本身. 静态方法可以通过类名::直接调用, 这里没有对象, \$this指代的就为空, 系统就会报错. 所以静态方法内调用变量, 不能通过$this.

    注意self::后面的变量要有$符号.

    静态的本质

    不要小瞧这个static, 加上了它, 其实不只是可以直接调用这么简单, 成员变量和方法的意义发生了本质上的变化:

    在静态方法中只能调用静态变量, 而不能调用普通变量, 普通方法则可以调用静态变量. 这是由静态方法的属性决定的, 因为普通的成员变量是与"对象"绑定的, 而静态变量是与"类"绑定的.

    我再详细解释一下静态变量和普通变量的区别:

    我们举个例子:

    class Shouji
    {
        static public $test;           //定义一个静态变量
        static function test5()        //定义静态方法来操作并输出静态变量
        {
            self::$test++;
            echo self::$test;
        }
    }
    class Shouji2 extends  Shouji          //定义一个子类
    {
        static function test5()           //定义子类的静态方法
        {
            self::$test++;                 //访问并操作父类的静态变量
            echo self::$test;
        }
    }
    $shouji1=new Shouji;               //新建父类对象
    $shouji1->test5();     //1, 通过对象调用静态方法
    $shouji2=new Shouji;   //新建另一个父类对象
    $shouji2->test5();    //2,  在前一次操作基础上继续+1
    $shouji3=new Shouji2;    //新建子类对象
    $shouji3->test5();    //3, 调用子类同名静态方法, 继续+1
    echo Shouji::$test;    //3, 通过父类::直接访问静态成员变量
    echo $shouji1::$test;   //3, 通过对象名::可以直接访问静态成员变量

    通过上面这个例子, 我们还能有以下几点总结:

    本文转载自:https://juejin.cn/post/6977200691919978510

    作者:传达室老大爷

    推荐学习:《PHP视频教程

    以上就是PHP中什么是静态?深入了解静态属性和静态方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    上一篇:深入浅析PHP中实现SSO单点登录的方法 下一篇:一起聊聊PHP中的策略模式
    第16期线上培训班

    相关文章推荐

    • php怎么在配置文件中设置时区• 浅谈PHP中如何使用位运算实现加减乘除运算• php 的错误显示功能怎么设置• PHP如何计算数据流中的第K大的元素• 整理总结一些PHP字符串中常用函数(收藏)• 深入浅析PHP中实现SSO单点登录的方法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网