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使用的更多相关文章

  1. C++ 不能在类体外指定关键字static

    C++ static 函数的问题 近日读 C++ primer 中static 一章 , 有这么一句话, “静态成员函数的声明除了在类体中的函数声明前加上关键字static 以及不能声明为const  ...

  2. Java关键字--static

    在Java中,将关键字static分为三部分进行讨论,分别为Java静态变量.Java静态方法.Java静态类 Java Static Variables Java instance variable ...

  3. 关键字 static

    A. 面向过程: 1. 静态全局变量:在全局变量前,加上关键词static,该变量就被定义成为一个静态全局变量. 1.1. 特点: |该变量在全局数据区分配内存: |未经初始化的静态全局变量会被程序自 ...

  4. Java之关键字static和final的使用

    static 在Java中声明属性.方法时,可使用关键字static来修饰. 1.static变量       按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或 ...

  5. [JAVA关键字] static & final

    JAVA十分常见的关键字static & final 总的来说final表示常量,即不可更改的:而static表示静态,即全局的 1. final 类:不能被继承 2. final 方法:能被 ...

  6. JAVA基础知识(2)--关键字static的使用

    在Java类中声明属性.方法和内部类时,可使用关键字static作为修饰符,static标记的属性和方法可以由整个类进行共享,因此static修饰的属性称为类成员或者称为类方法:static修饰的方法 ...

  7. C语言关键字static的绝妙用途

    为什么要说static妙,它确实是妙,在软件开发或者单片机开发过程中,大家总以为static就是一个静态变量,在变量类型的前面加上就自动清0了,还有就是加上static关键字的,不管是变量还是关键字, ...

  8. C/C++中关键字static的用法及作用

    本文将主要从static在C和C++共有的作用及C++特有的作用两个方面进行解析. 在C和C++中共有的作用 隐藏(对变量.函数均可) 当同时编译多个文件时,所有未加static前缀的全局变量或全局函 ...

  9. Java开发笔记(五十五)关键字static的用法

    前面介绍嵌套类的时候讲到了关键字static,用static修饰类,该类就变成了嵌套类.从嵌套类的用法可知,其它地方访问嵌套类之时,无需动态创建外层类的实例,直接创建嵌套类的实例就行.其实static ...

  10. Java 关键字 static

    关键字static作用如下: 1. 为某个基本数据类型或对象分配单一的存储空间. 2. 实现某个属性或方法与类关联.在类被加载后类名可以直接调用静态成员方法(下面简称静态方法)或者访问静态成员变量(下 ...

随机推荐

  1. Linux 内核剖析

    https://www.ibm.com/developerworks/cn/linux/l-linux-kernel/ 由于本文的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先 ...

  2. mysql - 标识列

    #标识列 /* 又称为自增长列 含义:可以不用手动插入值,系统提供默认的序列值 特点: 1.表示列必须和主键搭配吗?不一定,但是要求是一个key 2.一个表中只能有一个标识列! 3.标识列的类型有限制 ...

  3. Mac011--DbWrench Database安装

    Mac--DbWrench Database安装 DbWrench <=> powerdesigner 下载网址:http://dbwrench.com/download/install/ ...

  4. 性能测试工具 Jmeter GET 请求 参数为 Json 串且参数中存在变量的转化

    2.在BeanShell PreProcessor的实现:

  5. CSS实现背景图片屏幕自适应

    在做登陆页面等的首页的时候,经常会遇到需要放一张背景大图的情况,并且需要图片按比例缩放,来适应不同屏幕的大小. html代码如下: <!DOCTYPE html> <html lan ...

  6. 54-python基础-python3-字符串-字符串类型及其转换

    1-Python3中字符串类型: bytes:二进制 互联网上数据的都是以二进制的方式传输的. str :unicode的呈现形式. 2-Unicode UTF8 ASCII的补充 字符(Charac ...

  7. python学习第三十天函数的形参,实参及函数文档

    python函数的形参是定义函数def 函数名 小括号里面的变量,实参是调用函数时候的值,函数文档是提供函数功能的开发文档,下面 详细说明系列方法 1,函数的形参 def chan(name): pr ...

  8. python学习第五天流程控制分支if和循环while

    所有的逻辑结构围绕分支和循环进行,比如登陆注册,支付成功与否等等,下面讲述分支if用法和while用法 if age>30: print("www.96net.com.cn" ...

  9. 2019-1-24-WPF-文字描边

    title author date CreateTime categories WPF 文字描边 lindexi 2019-01-24 19:47:18 +0800 2019-1-24 19:40:7 ...

  10. python中字典类型的使用

    Python字典类型 字典是一种键值对的集合,键值对之间无序 字典类型的定义 采用{}或者dict()来创建字典对象,键值对之间使用:进行分隔. {<键1>:<值1>, < ...