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. SEC7 - MySQL 查询语句--------------进阶3:排序查询

    # 进阶3:排序查询 /* 引入: select * from employees; 语法: select 查询列表 from 表 [where 筛选条件] order by 排序的列表 asc/de ...

  2. Learning OSG programing---osgAnimation(3)

    接下来是用createModel函数创建模型: osg::ref_ptr<osg::Group> createModel(bool overlay, osgSim::OverlayNode ...

  3. 阿里云ECS服务器centos6.x安装docker问题盘点

    1.首先在centos6.x和centos7.x中yum安装docker的区分. centos6.x: yum install docker-io centos7.x: yum install doc ...

  4. 前端webpack & vue

    地址 : https://blog.csdn.net/jiang7701037

  5. 自定义InputFormat

    回顾: 在上一篇https://www.cnblogs.com/superlsj/p/11857691.html详细介绍了InputFormat的原理和常见的实现类.总结来说,一个InputForma ...

  6. Error: Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead

    一.extrack-tex-webpack-plugin作用:为了抽离css样式,防止将样式打包在js中引起页面样式加载错乱的现象二.使用 npm install extract-webpack-pl ...

  7. Linux设置数据库自动备份

    本文为转载,最末端为原地址 以CentOS 7.6系统与Oracle 11g为例: 一.先找到数据库的环境变量 如果是在root账户下,须先登录到数据库所在账户 su oraclecat ~/.bas ...

  8. MySQL01---简介及安装

    目录 MySQL简介及安装 DBA工作内容 DBA的职业素养 MySQL简介及安装 01 什么是数据? 02 什么是数据库管理系统 03 数据库管理系统种类 关系型数据库(RDMS)与非关系型数据库( ...

  9. 消费者与生产者---LinkedList方式模拟

    采用LinkedList数据结构方式来模拟消费者与生产者模型,小Demo import java.util.LinkedList; public class MyQueue { private fin ...

  10. Flutter-tabbar切換

    頂部tabbar切換 import 'package:flutter/material.dart'; import 'index_attendance_record.dart'; import 'in ...