php关键字static使用
php中static关键字使用:
情景1:静态变量
使用static关键字定义静态变量
静态变量:只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。
示例代码:
1 <?php
2 function test_1(){
$num = 0;
$num ++ ;
5 echo $num;
}
function test_2(){
static $num = 0;
$num ++ ;
echo $num;
}
test_1();echo ' || ';test_2();
echo '<hr />';
test_1();echo ' || ';test_2();
echo '<hr />';
test_1();echo ' || ';test_2();
echo '<hr />';
?>
上方代码输出结果:

没有使用static关键字 则每次调用变量都会初始化为0,反之,则保留改变的数值 只有在第一次调用函数时候初始化;
情景2:类的静态属性和方法
定义类的静态属性和方法时需要加上关键字static 可以实现直接使用类名调用属性和方法 不需要new关键字来实例化对象
<?php
/**
*
*/
class test_a
{
public $num = 0;
public function test_1()
{
$this->num = 100;
return 'num的值已经改变';
}
}
class test_b
{
public static $num = 0;
public static function test_1()
{
self::$num = 100;
return 'num的值已经改变';
}
}
$test = new test_a();
$test1 = new test_a();
echo $test->num,'/',$test->test_1(),'/',$test->num;
echo '<br />',$test1->num; echo '<hr>';
echo test_b::$num,'/',test_b::test_1(),'/',test_b::$num; ?>
结果如下:

静态方法和属性 直接用类名加上 :: 调用方法和属性 不需要 实例化;
类内调用自身的方法和属性 静态和非静态的也是有区别的。
情景3:方法的延迟静态绑定(类继承时使用)
class Father {
protected static $num = 100;
public function getNewFather()
{
return new self();
}
public function getNewCaller()
{
return new static();
}
}
/**
*
*/
class Son extends Father
{
public function __construct()
{
# code...
}
}
$f = new Father();
$g = new Son();
echo '<br/>';var_dump($f -> getNewFather());
echo '<br/>';var_dump($f -> getNewCaller());
echo '<hr/>';
echo '<br/>';var_dump($g -> getNewFather());
echo '<br/>';var_dump($g -> getNewCaller());
运行结果:

self在编译阶段解析为当前类 即self 所在的类
static延迟静态绑定则在执行阶段解析为当前类 即在编译阶段不解析,执行阶段解析为调用它的类
php关键字static使用的更多相关文章
- C++ 不能在类体外指定关键字static
C++ static 函数的问题 近日读 C++ primer 中static 一章 , 有这么一句话, “静态成员函数的声明除了在类体中的函数声明前加上关键字static 以及不能声明为const ...
- Java关键字--static
在Java中,将关键字static分为三部分进行讨论,分别为Java静态变量.Java静态方法.Java静态类 Java Static Variables Java instance variable ...
- 关键字 static
A. 面向过程: 1. 静态全局变量:在全局变量前,加上关键词static,该变量就被定义成为一个静态全局变量. 1.1. 特点: |该变量在全局数据区分配内存: |未经初始化的静态全局变量会被程序自 ...
- Java之关键字static和final的使用
static 在Java中声明属性.方法时,可使用关键字static来修饰. 1.static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或 ...
- [JAVA关键字] static & final
JAVA十分常见的关键字static & final 总的来说final表示常量,即不可更改的:而static表示静态,即全局的 1. final 类:不能被继承 2. final 方法:能被 ...
- JAVA基础知识(2)--关键字static的使用
在Java类中声明属性.方法和内部类时,可使用关键字static作为修饰符,static标记的属性和方法可以由整个类进行共享,因此static修饰的属性称为类成员或者称为类方法:static修饰的方法 ...
- C语言关键字static的绝妙用途
为什么要说static妙,它确实是妙,在软件开发或者单片机开发过程中,大家总以为static就是一个静态变量,在变量类型的前面加上就自动清0了,还有就是加上static关键字的,不管是变量还是关键字, ...
- C/C++中关键字static的用法及作用
本文将主要从static在C和C++共有的作用及C++特有的作用两个方面进行解析. 在C和C++中共有的作用 隐藏(对变量.函数均可) 当同时编译多个文件时,所有未加static前缀的全局变量或全局函 ...
- Java开发笔记(五十五)关键字static的用法
前面介绍嵌套类的时候讲到了关键字static,用static修饰类,该类就变成了嵌套类.从嵌套类的用法可知,其它地方访问嵌套类之时,无需动态创建外层类的实例,直接创建嵌套类的实例就行.其实static ...
- Java 关键字 static
关键字static作用如下: 1. 为某个基本数据类型或对象分配单一的存储空间. 2. 实现某个属性或方法与类关联.在类被加载后类名可以直接调用静态成员方法(下面简称静态方法)或者访问静态成员变量(下 ...
随机推荐
- Linux 内核剖析
https://www.ibm.com/developerworks/cn/linux/l-linux-kernel/ 由于本文的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先 ...
- mysql - 标识列
#标识列 /* 又称为自增长列 含义:可以不用手动插入值,系统提供默认的序列值 特点: 1.表示列必须和主键搭配吗?不一定,但是要求是一个key 2.一个表中只能有一个标识列! 3.标识列的类型有限制 ...
- Mac011--DbWrench Database安装
Mac--DbWrench Database安装 DbWrench <=> powerdesigner 下载网址:http://dbwrench.com/download/install/ ...
- 性能测试工具 Jmeter GET 请求 参数为 Json 串且参数中存在变量的转化
2.在BeanShell PreProcessor的实现:
- CSS实现背景图片屏幕自适应
在做登陆页面等的首页的时候,经常会遇到需要放一张背景大图的情况,并且需要图片按比例缩放,来适应不同屏幕的大小. html代码如下: <!DOCTYPE html> <html lan ...
- 54-python基础-python3-字符串-字符串类型及其转换
1-Python3中字符串类型: bytes:二进制 互联网上数据的都是以二进制的方式传输的. str :unicode的呈现形式. 2-Unicode UTF8 ASCII的补充 字符(Charac ...
- python学习第三十天函数的形参,实参及函数文档
python函数的形参是定义函数def 函数名 小括号里面的变量,实参是调用函数时候的值,函数文档是提供函数功能的开发文档,下面 详细说明系列方法 1,函数的形参 def chan(name): pr ...
- python学习第五天流程控制分支if和循环while
所有的逻辑结构围绕分支和循环进行,比如登陆注册,支付成功与否等等,下面讲述分支if用法和while用法 if age>30: print("www.96net.com.cn" ...
- 2019-1-24-WPF-文字描边
title author date CreateTime categories WPF 文字描边 lindexi 2019-01-24 19:47:18 +0800 2019-1-24 19:40:7 ...
- python中字典类型的使用
Python字典类型 字典是一种键值对的集合,键值对之间无序 字典类型的定义 采用{}或者dict()来创建字典对象,键值对之间使用:进行分隔. {<键1>:<值1>, < ...