总结
豆包 AI 助手文章总结

php中self和static的区别是什么

青灯夜游
发布: 2021-05-08 18:15:38
原创
3272人浏览过
php中self和static的区别:self只能引用当前类(current class)中的方法,而static允许函数调用在运行时绑定调用类(calling class)中的方法。

php中self和static的区别是什么

本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑

php中self与static的区别

通过一些示例,我们可以很容易看出self和static的区别。假定我们有class Car – 它有两个方法,model和getModel。注意,这里我们使用了关键字self。

class Car
{
    public static function model()
    {
         self::getModel();
    }

    protected static function getModel()
    {
        echo "I am a Car!";
    }

}
登录后复制

调用静态方法

Car::model();
登录后复制

得到输出

立即学习PHP免费学习笔记(深入)”;

I am a Car!
登录后复制

关键字self使得我们调用了class Car的getModel方法,输出了文本“I am a Car!”。

下面我们添加一个新的类,class Mercedes, 它继承自class Car,代码如下:

class Mercedes extends Car{

    protected static function getModel()
    {
        echo "I am a Mercedes!";
    }

}
登录后复制

当我们调用Mercedes::model()时,猜猜结果是什么?
可能你觉得结果会是:

I am a Mercedes!
登录后复制
登录后复制

但实际输出是:

I am a Car!
登录后复制

这是为什么呢?

对于self的解释

关键字“self”的工作原理是:它会调用当前类(current class)的方法。因为model方法只在class Car中定义的,所以对它来说当前类就是class Car。model中的self::getModel(),调用的自然也就是class Car中的getModel方法。

这个行为似乎不是我们想要的,它不符合面向对象的设计原则。如何解决呢?可以使用关键字static。

static关键字和延迟静态绑定(late static binding)

在PHP5.3中,加入了一个新的特性,叫做延迟静态绑定。它可以帮我们实现多态,解决上面的问题。简单来说,延迟静态绑定意味着,当我们用static关键字调用一个继承方法时,它将在运行时绑定调用类(calling class)。在上面的例子中,如果我们使用延迟静态绑定(static),意味当我们调用“Mercedes::model();”时,class Mercedes中的getModel方法将会被调用。因为Mercedes是我们的调用类

延迟绑定的例子

class Car{
    public static function model()
    {
         static::getModel();
    }    protected static function getModel()
    {
        echo "I am a Car!";
    }

}
登录后复制

我们只是将class Car中的self替换成了static,并未对class Mercedes作修改。

现在我们调用

Mercedes::model();
登录后复制

得到输出

立即学习PHP免费学习笔记(深入)”;

I am a Mercedes!
登录后复制
登录后复制

php 5.3以下的版本无法使用延迟静态绑定

注意,php 5.3之前的版本无法使用延迟静态绑定。如果尝试在php 5.3以下的版本运行上面的例子,将会报错。

php中的self和static

现在我们将例子中的self用static替换,可以看到,两者的区别在于:self引用的是当前类(current class)中的方法,而static允许函数调用在运行时绑定调用类(calling class)中的方法。

推荐学习:《PHP视频教程

以上就是php中self和static的区别是什么的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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