当前位置: 首页 > 编程笔记 >

PHP 静态属性和变量

岳允晨
2023-03-14
本文向大家介绍PHP 静态属性和变量,包括了PHP 静态属性和变量的使用技巧和注意事项,需要的朋友参考一下

示例

用public可见性定义的静态类属性在功能上与全局变量相同。可以从定义类的任何位置访问它们。

class SomeClass {
    public static int $counter = 0;
}

// 静态$counter变量可以在任何地方读取/写入
// 并且不需要实例化类
SomeClass::$counter += 1;

函数也可以在自己的范围内定义静态变量。这些静态变量通过多个函数调用持久化,这与在函数范围内定义的常规变量不同。这是实现Singleton设计模式的非常简单的方法:

class Singleton {
    public static function getInstance() {
        // 函数结束时不会删除静态变量$instance
        static $instance;

        // 第二次调用此函数将不会进入if语句,
        // 因为Singleton的实例现在存储在$instance中
        // 变量,并通过多次调用保持
        if (!$instance) {
            // 首次调用此函数将到达此行,
            // 因为$instance仅被声明,未初始化
            $instance = new Singleton();
        }

        return $instance;

    }
}

$instance1 = Singleton::getInstance();
$instance2 = Singleton::getInstance();

// 使用'==='运算符比较对象可检查它们是否为
//同一实例。将打印'true',因为静态$instance
// getInstance()方法中的变量通过多次调用而持久化
var_dump($instance1 === $instance2);
           

 类似资料:
  • 我们可以把一个方法赋值给类的函数本身,而不是赋给它的 "prototype"。这样的方法被称为 静态的(static)。 在一个类中,它们以 static 关键字开头,如下所示: class User { static staticMethod() { alert(this === User); } } User.staticMethod(); // true 这实际上跟直接将其

  • 模型静态属性 [ ] model 定义一个模型 'use strict'; module.exports = app => { const { STRING, INTEGER, DATE } = app.Sequelize; const Post = app.model.define('post', { id: { type: INTEGER, prima

  • 本文向大家介绍PHP静态成员变量和非静态成员变量详解,包括了PHP静态成员变量和非静态成员变量详解的使用技巧和注意事项,需要的朋友参考一下 数据成员可以分静态变量、非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于

  • 本文向大家介绍php面向对象中static静态属性和静态方法的调用,包括了php面向对象中static静态属性和静态方法的调用的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php中static静态属性和静态方法的调用。分享给大家供大家参考。具体如下: 这里分析了php面向对象中static静态属性和静态方法的调用。关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置

  • 本文向大家介绍PHP静态成员变量,包括了PHP静态成员变量的使用技巧和注意事项,需要的朋友参考一下 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员. 1、静态全局变量 定义:在全局变

  • 属性与Java中的字段是相同的,但是更加强大。属性做的事情是字段加上getter加上setter。我们通过一个例子来比较他们的不同之处。这是Java中字段安全访问和修改所需要的代码: public class Person { private String name; public String getName() { return name; }