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. 实现某个属性或方法与类关联.在类被加载后类名可以直接调用静态成员方法(下面简称静态方法)或者访问静态成员变量(下 ...
随机推荐
- socketpair
与pipe的区别 pipe产生的文件描述符是半双工的,需要pipe两次才能实现全双工,产生的两个描述符是一个读,一个写 socketpair直接就可以全双工,产生的两个文件描述符的任何一个都可读可写 ...
- [LeetCode] 137. Single Number II (位操作)
传送门 Description Given an array of integers, every element appears three times except for one, which ...
- 配置NAT实验
实验拓扑: 下面先配置静态NAT:(将私网地址转为公网地址)内部地址到外部地址的1对1转换 1.先配置出口静态路由,指向公网入口路由器 2.nat static命令配置1对1的IP地址转换 3.测试: ...
- javaScript Map
} } } vertices.push(v); adjList.set ...
- Swipe-移动端触摸滑动插件swipe.js
原文链接:http://caibaojian.com/swipe.html 插件特色 viaswipe.JS是一个比较有名的触摸滑动插件,它能够处理内容滑动,支持自定义选项,你可以让它自动滚动,控制滚 ...
- K The Right-angled Triangles
链接:https://ac.nowcoder.com/acm/contest/338/K来源:牛客网 题目描述 Consider the right-angled triangles with sid ...
- Gradle 入门--只此一篇
是什么? 在语法上是基于Groovy语言的(Groovy 是一种基于JVM的敏捷开发语言,可以简单的理解为强类型语言java的弱类型版本),在项目管理上是基于Ant和Maven概念的项目自动化建构工具 ...
- 关于正则表达式RegExp
常用元字符串 元字符 说明 \d 匹配 数字 \D 匹配 非数字 \w 匹配 数字,字母,下划线 \W 匹配 任意不是字母,数字,下划线 \s 匹配 空白符 \S 匹配 任意不 ...
- 20180209-os模块
下面将学习关于os模块的相关操作 项目练习的目录结构如下:所有的操作都是基于os_exercise.py模块 1.获取当前的Python脚本的工作目录路径 os.getcwd() # 1.获取当前目录 ...
- JavaScript面向对象编程(2)-- 类的定义
最近这一段时间事情太多了,没有时间再继续写,幸好这两天有点小闲,先小写一下JavaScript中面向对象一中推荐的方法.本文承接上一篇JavaScript面向对象编程(1) -- 基础. 上篇说过,J ...