首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP之static静态变量详解(一)

静态变量属于静态存储方式,其存储空间为内存的静态数据区(静态存储区内分配存储单元),该 区域中的数据整个程序的运行期间一直占用这些存储空间(程序整个运行期间都不释放),也可以认为是其内存地址不变...,始终保持最后一次的赋值 而不是申请成功,不再接受其他的同样申请 静态变量并不是说其就不能改变值,不能改变值的量叫常量。...其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。...而对自动变量赋初值是函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。 3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。...static静态变量会被放在程序的全局存储区(即在程序的全局数据区,而不是堆栈中分配,所以不会导致堆栈溢出),这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。

2.1K31
您找到你想要的搜索结果了吗?
是的
没有找到

变种 Builder 模式:优雅的对象构建方式

常见的两种构建方式 日常开发,我们经常需要给某个对象的变量赋值,这个赋值的过程称为 对象的构建。...这种方式是 先创建对象、赋值,用户不知道什么时候拿到的对象是完整的,构建完成的。很有可能你只 set 了一两个属性就返回了,一些必要的属性没有被赋值。...好处就是文章开头所说的: 看起来很整齐; 先赋值创建对象。 最终调用 build() 方法才创建了构建类的对象,保证了状态的完整性。 缺点嘛,就是需要额外写的代码多了点。...不过还好,有前辈开发出了 Android Studio 插件来拯救我们。...Android Studio 中使用插件自动生成 变种 Builder 模式代码 第一步:下载插件 Inner Builder: ?

1.4K90

【JS ES6】const var let 一文搞懂声明关键字所有的知识点

相同点 访问外部全局变量 重新声明变量 不重新声明 全局污染问题 块级作用域 常量的知识点 var全局污染 ----         声明                     ...//作用域中出现了 let const声明 会将这个变量绑定到函数,阻碍外部同名变量进入,会往上寻找,变量,但不会跳出函数。...} func(); 使用 let 定义变量 务必要先定义使用 定义函数作用域问题         相同点 访问外部全局变量 var a = "xiao xie"; function..."; console.log(a); } func(); console.log(a); 函数内部重新定义并赋值了a,相当于重新开了一块儿内存...也就是说 变量在内部声明 是私有的 在内部不声明则是全局的,(共同点) 全局污染问题 上面已经提到过了这个问题,实际开发,我们应该严格遵守代码规范,不能图方便,不要不声明变量,就直接使用,不然会在后续书写问题引发安全隐患

30910

python基础(5):深入理解 python 赋值、引用、拷贝、作用域

python 赋值语句总是建立对象的引用值,而不是复制对象。...本质上是递归 copy (5)对于不可变对象和可变对象来说,浅复制都是复制的引用,只是因为复制不变对象和复制不变对象的引用是等效的(因为对象不可变,当改变时会新建对象重新赋值)。...可变类型数据对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请(+/-)即可,也就是它的内存地址会保持不变,但区域会变长或者变短。...函数参数传递的时候,Python其实就是把参数里传入的变量对应的对象的引用依次赋值给对应的函数内部变量。...= 'bar'这句中,它是“有歧义的“,因为它既可以是表示引用全局变量s,也可以是创建一个新的局部变量,所以python,默认它的行为是创建局部变量,除非显式声明global,global定义的本地变量会变成其对应全局变量的一个别名

1.5K70

Python基础之变量进阶

,但b的便签纸位置不变函数传参与引用的关系 函数参数的传递,实际传送的是对应实参变量的引用,而不是实参保存的数据; def test(num): print("函数内部%d对应的内存地址是...: 数字类型; 元组; 字符串; 可变类型,内存的数据可以被修改: 列表; 字典; 可变类型修改和重赋值对引用的影响 可变类型比如列表,字典,对它们进行数据修改时,不会对引用的内存地址造成影响; 只有当我们对变量进行重新赋值之后...在其他语言中,大多都不推荐使用全局变量,因为可变范围太大,不可控情况多; 局部变量 局部变量介绍 局部变量是函数内部定义的变量,只能在函数内部使用; 函数执行完成函数内部的局部变量,会被系统回收;...函数内部,可以直接通过全局变量的引用获取对用的数据; 但是,python函数内部不能直接修改全局变量的值,如果用全局变量函数内部重新赋值,本质上只是创建一个同名局部变量而已; num =...函数要使用的变量必须在函数被调用前就被定义好,否则会报错; 一般讲所有的全局变量都放在其他函数的上方,这样可以确保每个函数都能正确的使用全局变量

60010

Android 组件化】使用 Gradle 实现组件化 ( 组件模式与集成模式切换 )

组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 ) , 顶层的 build.gradle 定义了相关参数变量 ; 顶层的 build.gradle 定义全局的变量..., 用于统一管理各个 Module 的编译相关版本号 ; 全局变量可以定义 ext 扩展 , 也可以定义 gradle.properties 属性 ; 组件化的本质就是可以实时切换依赖库...保持不变 : apply plugin: 'com.android.application' apply plugin: 'kotlin-android' Library Module 下的 build.gradle...资源配置选项 , 可以配置 java , manifest , res , assets , 等目录 ; Android Studio 默认的 Java 代码的路径是 Component\app\...}") // def 相当于 Java 的 Object // 声明 config 和 appId 变量 , 并为其赋值 def androidConfig = rootProject.ext.androidConfig

68110

Python函数

1.1.Python函数定义 1.2.对象创建 python ,类型属于对象,变量是没有类型的: 以上代码,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量...1.3.可更改对象和不可更改对象 python ,strings,tuples, 和 numbers 是不可更改(重新赋值,原值不再存在)的对象,而 list,dict等则是可以修改(重新赋值...3)缺省参数 传入参数时未给参数赋值,则保持默认值。...6)变量作用域 1' 全局变量 定义在所有函数外则为全局变量,可在所有代码中使用。 当需要在函数内定义全局变量时,必须用global语句。...在上面的例子函数内部,total是局部变量,而在外部total是全局变量,局部变量的改变不会改变全局变量的值,因此第一个打印结果是30,而第二个是0。

95690

Solidity:变量与常量

需要注意的一点是,状态变量和全局变量的使用可能会耗费更多的gas,因为它们涉及到区块链上存储和读取数据。因此,应该尽量减少这两种类型变量的使用,特别是需要大量计算的函数。...1.1 局部变量(Local Variables) 局部变量是函数内部声明的变量。它们只能在声明它们的函数访问,当函数执行结束,它们就会被销毁。...常量 Solidity,有两种主要的方式可以声明不变的(不可修改的)值:常量Constants和Immutable。...这种类型的变量创建合约时可以被赋值一次,且此后其值合约生命周期内不可更改。不同于constant,immutable变量的值可以构造函数中进行计算并在运行时赋值。...例如: address immutable owner; constructor() { owner = msg.sender; } 在这个例子,owner只构造函数中被赋值,然后合约生命周期内保持不变

9410

es6的Let和Const详解

old' } { let zxx3 = 'zxx is a good girl' var zxx4 = 'zxx is 8 years old' } // 不会报错,各个块级作用域之间不互相影响 不能在函数内部重新声明参数...不过,对于引用类型而言的话,它指的并不会对象的内容不变,而是对象的地址不变。也就是说,你可以修改对象的内部成员,但是你不可以修改该变量的地址。...,但是如果将另一个数组赋值给a,就会报错。...ES5 之中,顶层对象的属性与全局变量是等价的。 window.a = 1; a // 1 a = 2; window.a // 2 上面代码,顶层对象的属性赋值全局变量赋值,是同一件事。...ES6 规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。

52430

C++学习总结1——几个基本概念

过了几天发现只Visual Studio里面调试怎么也搞不定,只好硬着头皮,重新学习指针的用法。在看书和看别人写的博客,感觉学到了许多新的东西,不光是关于指针,还有其他一些以前我不太清楚的内容。...系统默认初始化规则 所谓系统默认初始化规则,就是声明变量时未对其进行初始化的情况下,编译器对其赋值的一套规则。对于内置类型和类类型,规则不同;对于函数内变量和函数外变量,定义规则也不同。...内置类型变量 内置类型指int,float,char和void等基本类型(C++,string不是内置类型)。...对于内置类型,如果在函数定义,则系统不对其进行自动赋值;如果在函数外定义(即全局变量),则将其初始化为0(这里的“0”对不同的类型有不同的意义:对int变量,为整数0,对char变量,为‘’)。...全局变量保存在全局数据区,该区域的变量在编译时会自动初始化;对于局部变量,系统启动时不会为其开辟内存空间,只有当它所在的函数被调用时,才建立函数数据空间。变量如果没有显式初始化,则其值为随机值。

53020

python 函数进阶

,应用场景如下: 只是单纯地做一件事情,例如 显示菜单 函数内部 针对全局变量进行操作,例如:新建名片,最终结果 记录在全局变量 注意: 如果全局变量的数据类型是一个 可变类型,函数内部可以使用...方法 修改全局变量的内容 —— 变量的引用不会改变 函数内部,使用赋值语句 才会 修改变量的引用 1.2 无参数,有返回值 此类函数,不接收参数,但是有返回值,应用场景如下: 采集数据,例如 温度计...,返回结果就是当前的温度,而不需要传递任何的参数 1.3 有参数,无返回值 此类函数,接收参数,没有返回值,应用场景如下: 函数内部的代码保持不变,针对 不同的参数 处理 不同的数据 例如 名片管理系统...函数的返回值 进阶 程序开发,有时候,会希望 一个函数执行结束,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理 返回值 是函数 完成工作,最后 给调用者的 一个结果 函数中使用 return...return (temp, wetness) 提示:如果一个函数返回的是元组,括号可以省略 技巧 Python ,可以 将一个元组 使用 赋值语句 同时赋值给 多个变量 注意:变量的数量需要和元组的元素数量保持一致

66930

js的坑,你遇到过几个

1.变量类型模糊,容易出现问题; var a='1',b=1; a==b; //true a===b; //false 2.全局变量函数内部变量同名时,函数内部声明变量,声明位置虽然在后...,但在这之前,此名变量已为‘undefined’; 其实这个的准确说法应该叫法,作用域声明提前,也就是说作用域内所有的声明都会在编译前放到作用域的最前面,赋值位置不变。...,可以改变a内的属性,但a={}时,函数内的a被重新定义了不再指向函数外的a,所以不能是cccc。...还有个更的是逗号表达式。 运算符 描述 . [] () 字段访问、数组下标、函数调用以及表达式分组 ++ -- - ~ !...: 条件 = oP= 赋值、运算赋值 , 多重求值 9.日期类型转换时优先转换为字符串型。

1.1K50

python基础教程:作用域和命名空间

例如,表达式a.name,real是对象a的一个属性。...同样对模块函数的引用也是属性引用,表达式modname.funcname,modname是一个模块对象,而funcname是它的一个属性。 属性可以是只读的也可以是可写的。...,并且函数返回或抛出一个不在函数内部处理的异常时被删除。...:包含当前模块的全局名称 最外面的作用域:最后搜索,是包含内置名称的命名空间 如果一个名称被声明为全局变量,则所有引用和赋值将直接指向包含该模块的全局名称的中间作用域。...如果没有被声明为非本地变量,这些变量将是只读的(尝试写入这样的变量只会在最内层作用域中创建一个新的局部变量,而同名的外部变量保持不变)。

56640

Apply Changes Android 11 的增强特性

简介 Apply Changes 是 Android Studio 的一项功能,我们 Android Studio 3.5 引入了这项功能,以帮助开发者快速迭代您对应用所做的更改。...本文我们将探讨 Android Studio 该功能是如何实现的。...通过使用 Apply Code Changes 增加 y 的情况下,很难计算出正确的 y 值。事实上对 y 的赋值,即使采用最接近的模拟类加载和初始化 y 的程序,也是有争议的。...局限与即将推出的新功能 Android Studio 4.2 Canary 3 ,此功能仅支持新增静态原语的应用场景。...试想这样的一个例子: 构造函数发生了变化,但是所有基于原来的构造函数初始化的对象并没有重新初始化。同样的,该规则也适用于静态变量,因为 不会被重新调用。

65730

【深入浅出C#】章节 2:数据类型和变量:变量和常量的声明和初始化

对于实例变量和静态变量,可以声明时使用默认值进行初始化,也可以构造函数或静态构造函数中进行赋值操作。...3.3 使用赋值运算符和构造函数进行初始化 C#,可以使用赋值运算符和构造函数进行变量的初始化。 赋值运算符(=):使用赋值运算符可以将一个值赋给变量。...它们程序的作用是提供了一种稳定和可靠的数据存储方式,确保了数值的不变性。 6.3 只读变量的概念和用法 C#,使用readonly关键字声明和使用只读变量。...只读变量的值初始化不能更改,这意味着它们整个对象的生命周期中保持不变。 只读变量的命名通常使用驼峰式命名规则,以增加可读性和标识性。...使用只读变量的好处是: 提供了一种在运行时保持不变的值存储方式。 增加了代码的可读性和可维护性。 在对象的生命周期中提供了一个不变的常量值。

32620

【C语言笔记】static关键字

utm_source=copy C语言代码是以文件为单位来组织的,一个源程序的所有源文件,一个外部变量(注意不是局部变量)或者函数只能在一个源程序定义一次,如果有重复定义的话编译器就会报错。...所以,普通全局变量穿上static外衣,它就变成了新娘,已心有所属,只能被定义它的源文件(新郎)的变量或函数访问。...以下是示例程序: file1.h如下: #include void printStr(); 我们file1.c定义一个静态全局变量hello, 供file1.c函数printStr...这个比较好理解,每次函数调用静态局部变量的时候都修改它然后离开,下次读的时候从全局存储区读出的静态局部变量就是上次修改的值。...可以看出,函数每次被调用,普通局部变量都是重新分配,而静态局部变量保持上次调用的值不变

88330

Apply Changes Android 11 的增强特性

[df5fce9d5c6dd2809b3203ac8b1e551ed36069a9_2_690x204.png] 简介 Apply Changes 是 Android Studio 的一项功能,我们...本文我们将探讨 Android Studio 该功能是如何实现的。...通过使用 Apply Code Changes 增加 y 的情况下,很难计算出正确的 y 值。事实上对 y 的赋值,即使采用最接近的模拟类加载和初始化 y 的程序,也是有争议的。...局限与即将推出的新功能 Android Studio 4.2 Canary 3 ,此功能仅支持新增静态原语的应用场景。...试想这样的一个例子: 构造函数发生了变化,但是所有基于原来的构造函数初始化的对象并没有重新初始化。同样的,该规则也适用于静态变量,因为 不会被重新调用。

85110

ES6之let和const命令

var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; } ES6 明确规定,如果区块存在let和const命令...function func() { let a = 10; var a = 1; } // 报错 function func() { let a = 10; let a = 1; } 因此,不能在函数内部重新声明参数...const除了以下两点与let不同外,其他特性均与let相同: const一旦声明变量,就必须立即初始化,不能留到以后赋值。 一旦声明,常量的值就不能改变。 本质 const限定的是赋值行为。...也就是说 const a = 1; a = 2;//报错 const arr = []; arr.push(1) //[1] //声明引用型数据为常量时,const保存的是变量的指针,只要保证指针不变就不会保存...顶层对象属性与全局变量 顶层对象,浏览器环境指的是window对象, Node 指的是global对象。ES5 之中,顶层对象的属性与全局变量是等价的。

30020
领券