PHP 中的静态变量

2024-02-11

我发现了有关 PHP 中静态变量的不同信息,但没有任何信息能够真正解释它是什么以及它是如何工作的。

我读过,在类中使用静态属性时,该类实例化的任何对象都不能使用静态属性,而该类实例化的对象可以使用静态方法吗?

但是,我一直在尝试研究静态变量在不在类中的函数中的作用。另外,函数中的静态变量的工作方式是否有点像 javascript 中的闭包,还是我完全不同意这个假设?


我读过,当在类中使用时,静态属性不能被该类实例化的任何对象使用

这取决于你的意思。例如:

class Foo {
    static $my_var = 'Foo';
}

$x = new Foo();

echo $x::$my_var;  // works fine
echo $x->my_var;   // doesn't work - Notice: Undefined property: Foo::$my_var

并且静态方法可以由类实例化的对象使用???

是的,属于该类的实例化对象可以访问静态方法。

关键词static在类的上下文中,其行为有点像其他语言中的静态类变量。声明的成员(方法或变量)static与类相关联,而不是与该类的实例相关联。因此,您可以在没有类实例的情况下访问它(例如:在上面的示例中,我可以使用Foo::$my_var)


但是,我一直在尝试研究静态变量在不在类中的函数中的作用。

另外,函数中的静态变量的工作方式是否有点像 javascript 中的闭包,或者我完全不同意这个假设。

在类之外(即:在函数中),static变量是函数退出时不会丢失其值的变量。所以从某种意义上说,是的,它们的工作方式就像 JavaScript 中的闭包。

但与 JS 闭包不同的是,在同一函数的不同调用中,变量只有一个值。来自 PHP 手册的示例:

function test()
{
    static $a = 0;
    echo $a;
    $a++;
}

test();  // prints 0
test();  // prints 1
test();  // prints 2

参考:static关键词(在课堂上) http://php.net/manual/en/language.oop5.static.php, (在函数中) http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 中的静态变量 的相关文章

随机推荐

  • 无法将字符串转换为 pandas 中的浮点数(ValueError)

    我有一个从 JSON 输出创建的数据框 如下所示 Total Revenue Average Revenue Purchase count Rate Date Monday 1 304 40 CA 20 07 CA 2 345 1 54 存
  • 如何在 Python 中从给定 CDF 的分布中采样

    我想从概率分布中抽取样本CDF https en wikipedia org wiki Cumulative distribution function 1 e x 2 python scipy 等中有没有方法 使您能够从仅给定 CDF 的
  • Django 到底什么时候运行查询?

    虽然我了解 Django 的 QuerySet 和延迟执行的高级思想 但我没有在 Django 3 1 2 源代码中看到查询执行是如何触发的 即 数据库被命中 例如 根据Django 文档 https docs djangoproject
  • nasm 汇编linux定时器或睡眠

    我正在尝试找到一种方法让我的代码在继续之前等待两秒钟 我在保护模式下使用Linux的nasm 所以我只能使用int 80h 我找到了一个syscall称为 alarm 27 另一个叫 pause 29 但是 当我尝试使用这些时 程序会等待并
  • Android Fabric - 以自定义间隔发送捕获的异常

    根据 Fabric 文档面料文档 https docs fabric io android crashlytics caught exceptions html为了减少用户流量 仅在应用程序启动时发送捕获的异常 Crashlytics 在专
  • 如何使用 JTidy 从解析的 HTML 中获取错误/警告消息?

    我能够解析 HTML 但我想从解析的 HTML 中提取警告消息并将其显示给用户 这是我的代码 Tidy tidy new Tidy StringBuffer StringBuffer1 new StringBuffer b Hello u
  • java中的抽象和接口[重复]

    这个问题在这里已经有答案了 可能的重复 接口与抽象类 一般面向对象 https stackoverflow com questions 761194 interface vs abstract class general oo 什么时候使用
  • ALT-TAB 应用程序图标像素化

    When a child window of my application is opened and I view the ALT TAB menu the application icon looks pixellated I assu
  • 在 JodaTime 中生成日期范围

    我需要检查数组列表中是否存在日期 字符串 我有两个日期 首先我需要生成这两个日期之间的日期范围并将它们存储在数组中 这就是我正在做的事情 DateTimeFormatter dateFromatter DateTimeFormat forP
  • cabal 无法使用 http 代理

    我的Linux redhat6 服务器必须使用http代理来连接到外界 虽然它适用于 wget 等其他东西 但它不适用于 cabal cabal update v3 显示这样的错误 407 需要代理身份验证阴谋 下载失败http hacka
  • phpMyAdmin 错误 1932 - 引擎中不存在表

    Windows 7 xampp 我有一个有 14 个表的数据库 这几天我和他们所有人一起工作 直到今天早上都没有出现任何问题 除了桌子外 所有桌子都可以posts 当我单击它的名称 phpMyAdmin 中的左侧菜单 时 我收到一条消息 1
  • Dagger:定义可注入类的正确方法,该类在其构造函数中采用上下文

    我想使用 dagger Square 的 dagger v1 创建一个单例类 其构造函数需要上下文作为参数 然后我想将这个单例类注入到我的 MainActivity 中 定义这一点的正确步骤是什么 我尝试这样做 单例类 Module inj
  • 如何检查 Android 上是否启用 USB 连接模式?

    我在 Android 市场上有一个应用程序 用户经常将他们的设备连接到计算机以将音乐添加到应用程序文件夹中 我在说明中特别指出 当启用 USB 连接模式时 Android 应用程序无法与 SD 卡通信 显然这还不够愚蠢的证据 有没有办法在j
  • 站点包位于 Conda 环境中的什么位置?

    在 Conda 环境中安装软件包后 我想对该软件包中的代码进行一些更改 我在哪里可以找到site packages包含已安装软件包的目录 我有一个 Anaconda Python 2 7base分发 但我没有找到目录 Users usern
  • 如何在 VueJS Webpack 项目中使用 Modernizr

    有人有在 VueJs Webpack 项目中捆绑和使用 Modernizr 的简单教程吗 我使用带有单文件组件的 VueJS 默认 Webpack 项目 我想要全部捆绑起来 为了精确起见 我想在大多数表单中使用 inputtypes dat
  • mongodb数据库与Java play 2.0

    有教程如何在 Java play 2 0 中使用 mongodb 数据库吗 在官方网站 playframework org 上似乎只有NoSql示例 在 github 上查看这个演示 https github com czihong pla
  • 绘制抗锯齿圆的算法?

    绘制抗锯齿圆的好算法是什么 已填充和未填充 Bresenham 因直线算法而闻名 也有一个圆形算法 吴晓林对直线算法进行了抗锯齿处理 对圆算法也进行了同样的处理 http en wikipedia org wiki Xiaoolin Wu
  • opencv 库的双链表损坏

    嗨 我写了这个简单的程序 Main cpp std vector
  • 使用 countplot() 进行标准化

    下面的代码显示了一个图表 其中包含我的列表中的值的数量 import seaborn as sns sns countplot 0 1 2 3 1 2 1 3 2 1 2 1 3 plt show 我想要带有百分比的相同图 seaborn
  • PHP 中的静态变量

    我发现了有关 PHP 中静态变量的不同信息 但没有任何信息能够真正解释它是什么以及它是如何工作的 我读过 在类中使用静态属性时 该类实例化的任何对象都不能使用静态属性 而该类实例化的对象可以使用静态方法吗 但是 我一直在尝试研究静态变量在不