php类的静态变量,PHP静态变量

本文目录一览:

请问PHP中的静态变量怎么理解?

static

变量是php中的变量作用范围的一个重要特性

静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果

一个普通的变量,如

$message

在它所在的函数执行完之后就被释放了

即第二个function执行10次,每次执行完后,$message变量被释放,所以每次都是1

变量前加了static后,该变量在它所在的函数执行完后不会被释放

即第一个function每次被执行后,static

$message没有被释放,它将被继续累加

谁知道PHP中静态变量是什么意思?急!

静态变量,简单的说,就是一种在特定范围内一直存在的变量,你可以把全局变量当作一种静态变量,它的值在代码运行期间一直存在。

通常来说,静态局部变量大多用于特殊场合里,比如,当在某函数中,希望每次运行函数时,都使用上次函数的结果,此时除使用全局变量外,就可以使用静态变量。

以下是关于静态局部变量特点的一些资料说明:

1. 不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。

2. 静态局部变量只会初始化一次。

3. 静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。

4. 当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

PHP里,定义静态变量使用 static 进行修饰。比如

static $avar= 0;

PHP类的静态(static)方法和静态(static)变量使用介绍

在php中,访问类的方法/变量有两种方法:

1.

创建对象$object

=

new

Class(),然后使用”-”调用:$object-attribute/function,前提是该变量/方法可访问。

2.

直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以。但是有前提条件:

A.

如果是变量,需要该变量可访问。

B.

如果是方法,除了该方法可访问外,还需要满足:

b1)

如果是静态方法,没有特殊条件;

b2)

如果是非静态方法,需要改方法中没有使用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题。

然后我们再看一下使用$object-…

和使用class::…

都有什么区别:

1.

使用$object-…

,需要执行构造函数创建对象;

2.

使用class::…

调用静态方法/变量,不需要执行构造函数创建对象;

3.

使用class::…

调用非静态方法/变量,也不需要执行构造函数创建对象。

然后奇怪的地方就出来了,既然2和3都一样,那静态方法/变量存在还有什么意义呢?

差异还是显然存在的,如下:

1.

静态变量

静态成员只保留一个变量值,而这个变量值对所有的实例都是有效,也就是说,所有的实例共享这个成员。

2.

静态方法

静态方法可以直接使用class::…

来调用,而非静态方法需要满足一定限制条件才能使用class::..

的方法调用,如之前所述

php中的静态变量和动态变量的区别

动态变量和静态变量的区别:

1、存储位置

动态变量:存储在内存出栈数据区

静态变量:存储在全局数据区(静态数据区)

2、生命期

动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数范围变量将失效

静态变量:程序结束时才释放

3、作用域

动态变量:同样的要根据你定义的位置才能确定,和第二点的一样

静态变量:当前文件中有效

堆和栈的区分:

堆(Heap)栈(Stack)

1、内存分配方面:

堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。

栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、申请方式方面:

堆:需要程序员自己申请,并指明大小。在c中malloc函数如p1 = (char *)malloc(10);在C++中用new运算符,但是注意p1、p2本身是在栈中的。因为他们还是可以认为是局部变量。

栈:由系统自动分配。 例如,声明在函数中一个局部变量 int b;系统自动在栈中为b开辟空间。

3、系统响应方面:

堆:操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样代码中的delete语句才能正确的释放本内存空间。另外由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。

栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。

4、大小限制方面:

堆:是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

栈:在Windows下, 栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是固定的(是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。

5、效率方面:

堆:是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便,另外,在WINDOWS下,最好的方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存,虽然用起来最不方便。但是速度快,也最灵活。

栈:由系统自动分配,速度较快。但程序员是无法控制的。

6、存放内容方面:

堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。

栈:在函数调用时第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈,然后是函数中的局部变量。 注意: 静态变量是不入栈的。当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。

7、存取效率方面:

堆:char *s1 = “Hellow Word”;是在编译时就确定的;

栈:char s1[] = “Hellow Word”; 是在运行时赋值的;用数组比用指针速度要快一些,因为指针在底层汇编中需要用edx寄存器中转一下,而数组在栈上直接读取。

php中静态和静态变量的区别

变量值,所在使用过程中不相同。

1、php中静态和静态变量两者的变量值是不相同的。

2、两者在所在使用过程中也是不相同,是两种不同项目的使用标准。

php类怎么给静态变量赋值

case-1:给类中的静态变量赋值:

class PHPJungle{

private static $__instance = null;# 类中的私有成员:静态变量

public function __construct(){

}

public static function getInstance(){

if(self::$__instance instanceof self)

return self::$__instance; # 给静态变量赋值

return new self();

}

public function anyMethod(){

echo ‘Hello world!’,’hr’;

return;

}

}

$PJ = new PHPJungle();

$PJ-getInstance()-anyMethod();

case-2:给函数中的局部静态变量赋值:

function hello(){

static $total = 0;

echo $total,’hr’;

$total++; # 给函数中的局部静态变量赋值

}

hello();# 0

hello();# 1

hello();# 2

原创文章,作者:LGCG,如若转载,请注明出处:https://www.506064.com/n/140867.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
LGCGLGCG
上一篇 2024-10-04 00:24
下一篇 2024-10-04 00:24

相关推荐

  • int类型变量的细节与注意事项

    本文将从 int 类型变量的定义、声明、初始化、范围、运算和类型转换等方面,对 int 类型变量进行详细阐述和讲解,帮助读者更好地掌握和应用 int 变量。 一、定义与声明 int…

    编程 2025-04-29
  • PHP和Python哪个好找工作?

    PHP和Python都是非常流行的编程语言,它们被广泛应用于不同领域的开发中。但是,在考虑择业方向的时候,很多人都会有一个问题:PHP和Python哪个好找工作?这篇文章将从多个方…

    编程 2025-04-29
  • Python input参数变量用法介绍

    本文将从多个方面对Python input括号里参数变量进行阐述与详解,并提供相应的代码示例。 一、基本介绍 Python input()函数用于获取用户输入。当程序运行到inpu…

    编程 2025-04-29
  • Centos7配置静态ip

    本文将详细阐述如何在Centos7系统中配置静态ip。 一、查看网络接口 在配置静态ip之前,我们首先需要查看系统中的网络接口,以确定我们需要配置的网卡是哪一个。 ifconfig…

    编程 2025-04-29
  • Python匿名变量的使用方法

    Python中的匿名变量是指使用“_”来代替变量名的特殊变量。这篇文章将从多个方面介绍匿名变量的使用方法。 一、作为占位符 匿名变量通常用作占位符,用于代替一个不需要使用的变量。例…

    编程 2025-04-29
  • PHP怎么接币

    想要在自己的网站或应用中接受比特币等加密货币的支付,就需要对该加密货币拥有一定的了解,并使用对应的API进行开发。本文将从多个方面详细阐述如何使用PHP接受加密货币的支付。 一、环…

    编程 2025-04-29
  • Python变量在内存中的存储

    该文章将从多个方面对Python变量在内存中的存储进行详细阐述,包括变量的声明和赋值、变量的引用和指向、内存地址的变化、内存管理机制等。 一、声明和赋值 在Python中,变量声明…

    编程 2025-04-29
  • Python变量类型用法介绍

    Python是一种解释型编程语言,它提供了丰富的数据类型,包括数字、字符串、列表、元组、集合、字典等。Python变量类型的定义是Python程序开发的基础,本文将从以下几个方面对…

    编程 2025-04-28
  • Python print输出变量

    Python是一种脚本语言,语法简单易懂,目前被广泛应用于数据处理、人工智能、web开发、游戏开发等领域。其中print函数是Python中最常用的函数之一,用于将变量输出到控制台…

    编程 2025-04-28
  • Python定义变量

    Python是一门高级编程语言,变量是Python编程中非常重要的一个概念。Python的变量定义方式非常简单,可以在程序中随时定义一个变量来存储数据,这方便了整个程序的逻辑编写,…

    编程 2025-04-28

发表回复

登录后才能评论