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

简介: PHP之static静态变量详解(二)

原文地址:http://www.cnblogs.com/phpgo/p/5658168.html

在看别人项目过程中,看到函数里面很多static修饰的变量,关于static修饰的变量,作用域,用法越看越困惑,所以查了下资料。

static用法如下:

1.static 放在函数内部修饰变量

2.static放在类里修饰属性,或方法

3.static放在类的方法里修饰变量

4.static修饰在全局作用域的变量

所表示的不同含义如下:

1.在函数执行完后,变量值仍然保存

如下所示:

<?php

functiontestStatic() {

    static$val= 1;

    echo$val;

    $val++;

}

testStatic();   //output 1

testStatic();   //output 2

testStatic();   //output 3

?>

2.修饰属性或方法,可以通过类名访问,如果是修饰的是类的属性,保留值

如下所示:

<?php

classPerson {

    static$id= 0;

 

    function__construct() {

        self::$id++;

    }

 

    staticfunctiongetId() {

        returnself::$id;

    }

}

echoPerson::$id;   //output 0

echo"<br/>";

 

$p1=newPerson();

$p2=newPerson();

$p3=newPerson();

 

echoPerson::$id;   //output 3

?>

3.修饰类的方法里面的变量

如下所示:

<?php

classPerson {

    staticfunctiontellAge() {

        static$age= 0;

        $age++;

        echo"The age is: $age

";

    }

}

echoPerson::tellAge(); //output 'The age is: 1'

echoPerson::tellAge(); //output 'The age is: 2'

echoPerson::tellAge(); //output 'The age is: 3'

echoPerson::tellAge(); //output 'The age is: 4'

?>

4.修饰全局作用域的变量,没有实际意义(存在着作用域的问题)

如下所示:

<?php

static$name= 1;

$name++;

echo$name;

?>

另外:考虑到PHP变量作用域

<?php

include'ChromePhp.php';

 

$age=0;

$age++;

 

functiontest1() {

    static$age= 100;

    $age++;

    ChromePhp::log($age);  //output 101

}

 

functiontest2() {

    static$age= 1000;

    $age++;

    ChromePhp::log($age); //output 1001

}

 

test1();

test2();

ChromePhp::log($age); //outpuut 1

?>

可以看出:这3个变量是不相互影响的,另外,PHP里面只有全局作用域和函数作用域,没有块作用域

如下所示:

<?php

include'ChromePhp.php';

 

$age= 0;

$age++;

 

for($i=0; $i<10; $i++) {

    $age++;

}

ChromePhp::log($i);   //output 10;

ChromePhp::log($age); //output 11;

?>

参考资料:

目录
相关文章
|
Java PHP 数据安全/隐私保护
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
本文详细介绍了PHP面向对象编程的一系列核心概念和用法,包括构造函数、析构函数、继承、方法重写、访问控制、接口、抽象类、静态成员、final关键字、以及this、self、parent这三个关键字的异同和作用。通过具体示例代码,展示了如何在PHP中使用这些面向对象的特性,以及它们在实际开发中的应用。
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
|
PHP
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
443 0
|
PHP
【PHP】static静态方法和普通方法的相互调用
【PHP】static静态方法和普通方法的相互调用
188 0
【PHP】static静态方法和普通方法的相互调用
|
存储 PHP
PHP的静态变量表是干什么的?底层原理是什么?
PHP的静态变量表是干什么的?底层原理是什么?
179 0
|
存储 缓存 算法
PHP的静态变量是干什么的?底层原理是什么?
PHP的静态变量是干什么的?底层原理是什么?
206 0
|
存储 PHP C语言
PHP之static静态变量详解(一)
PHP之static静态变量详解(一)
255 0
php:类中的static、final、const、parent、self、$this关键字使用方法和区别
php:类中的static、final、const、parent、self、$this关键字使用方法和区别
164 0
|
存储 PHP
php中static关键字的理解
函数内的static变量static静态变量的理解 静态变量 类型说明符是static。 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直 到整个程序运行结束(相反,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放)。
1138 0
|
PHP
php中的static
静态成员是一种类变量,可以把它看成时属于整个类而不是属于类的某个实例。与一般的实例变量不同的是,静态成员只保留一个变量值,而这个变量值对所有的实例都是有效的,也就是说,所有的实例共享这个成员。 $this只表示类的当前实例,而 self:: 表示的是类本身,在类之外的代码中不能使用这个操作符,而且它不能识别自己在继承树层次结构中的位置。
835 0
|
1月前
|
关系型数据库 MySQL PHP
PHP和Mysql前后端交互效果实现
本文介绍了使用PHP连接MySQL数据库的基本函数及其实现案例。内容涵盖数据库连接、选择数据库、执行查询、获取结果等常用操作,并通过用户登录和修改密码的功能实例,展示了PHP与MySQL的交互过程及代码实现。
175 0
PHP和Mysql前后端交互效果实现
下一篇
oss教程