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. 2019牛客暑期多校训练营(第三场)H Magic Line

    原题链接:H  Magic Line 题意简述: 给定n个点,要求画一条直线将n个点分成均有n / 2个点的两部分,不能有点在线上: 解题思路: 首先,先将所有的点进行以x为第一关键字,y为第二关键字 ...

  2. 跨域资源共享(CORS)-漏洞整理

    绕过方法整理 绕过 - 仅对域名校验 #POC #"Access-Control-Allow-Origin: https://xx.co & Access-Control-Allow ...

  3. PS总结

    1.ALT:取消工具选择状态2. photoshopcs6 出现因为智能对象不能直接进行编辑    解决方案:右击---图层名---栅格化图层3.Shift+F5:填充画布颜色 4.PS不能变换路径, ...

  4. Java中的多线程基础

    1.线程与进程 进程: 进程是程序运行以及资源分配的基本单位,一个程序至少有一个进程. 如下图所示: 线程: 线程是CPU调度和分配的基本单位,一个进程至少有一个线程. 同一个进程中的线程共享进程资源 ...

  5. java_第一年_JavaWeb(7)

    JSP执行过程 客户端发出请求访问JSP文件 JSP Container将要访问的JSP文件转译为Servlet的源代码(转译时期),并将其编译成.class文件(编译时期): 执行编译后的.clas ...

  6. CVE-2014-4014 Linux Kernel Local Privilege Escalation PoC

    /**  * CVE-2014-4014 Linux Kernel Local Privilege Escalation PoC  *  * Vitaly Nikolenko  * http://ha ...

  7. [fw]Linux系统使用time计算命令执行的时间

    Linux系统使用time计算命令执行的时间 当测试一个程序或比较不同算法时,执行时间是非常重要的,一个好的算法应该是用时最短的.所有类UNIX系统都包含time命令,使用这个命令可以统计时间消耗.例 ...

  8. bzoj2176 Strange string(字符串最小表示法)

    Time Limit: 10 Sec  Memory Limit: 259 MB 给定一个字符串S = {S1, S2, S3 … Sn}, 如果在串SS中, 子串T(|T| = n)为所有长度为n的 ...

  9. 【java】jstack分析查看线程状态

    演示代码 public class StackTest { public static void main(String[] args) { Thread thread = new Thread(ne ...

  10. SELECT COUNT语句

    数据库查询相信很多人都不陌生,所有经常有人调侃程序员就是CRUD专员,这所谓的CRUD指的就是数据库的增删改查. 在数据库的增删改查操作中,使用最频繁的就是查询操作.而在所有查询操作中,统计数量操作更 ...