当前位置:首页 > CN2资讯 > 正文内容

php static

3天前CN2资讯


 

 

 

当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。

 

静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员

---------------------------------

d.php



<?php

static $mm = "zzzzzzz";
$mm .= "test";
class Person {
static $id = 0;

function __construct() {
self::$id++;
}

public function getId() {
static $age = 0;
$age++;
echo "The age is: $age\n";
return self::$id;
}
}
echo Person::$id; //output 0
echo "<br/>";

$p1=new Person();
$p2=new Person();
$p3=new Person();
$p4=new Person();
var_dump($p1->getId());
var_dump($p1->getId());
var_dump($p1->getId());
var_dump($p1->getId());
var_dump($p1->getId());
var_dump($p1->getId());
echo "\n\n";

var_dump($p2->getId());
var_dump($p3->getId());

echo Person::$id; //output 3

?>


  

e.php



<?php
include "d.php";
echo "eeee\n";
var_dump(Person::$id);
$z = new Person();
$z->getId();
echo "----------\n";
function mm() {
static $age;
$age++;
echo "mmmmm:$age\n";
}

mm();
mm();
mm();
mm();


  

---------------------------

​​php之static静态变量详解​​


 




在看别人项目过程中,看到函数里面很多static修饰的变量,关于static修饰的变量,作用域,用法越看越困惑,所以查了下资料。

static用法如下:

1.static 放在函数内部修饰变量

2.static放在类里修饰属性,或方法

3.static放在类的方法里修饰变量

4.static修饰在全局作用域的变量

所表示的不同含义如下:

1.在函数执行完后,变量值仍然保存

如下所示:



<?php
function testStatic() {
static $val = 1;
echo $val;
$val++;
}
testStatic(); //output 1
testStatic(); //output 2
testStatic(); //output 3
?>



2.修饰类的属性或方法,可以通过类名访问,如果是修饰的是类的属性,保留值

如下所示:



<?php
class Person {
static $id = 0;

function __construct() {
self::$id++;
}

static function getId() {
return self::$id;
}
}
echo Person::$id; //output 0
echo "<br/>";

$p1=new Person();
$p2=new Person();
$p3=new Person();

echo Person::$id; //output 3
?>



3.修饰类的方法里面的变量,不论是静态方法还是对象方法

如下所示:



<?php
class Person {
static function tellAge() {
static $age = 0;
$age++;
echo "The age is: $age";
}
}
echo Person::tellAge(); //output 'The age is: 1'
echo Person::tellAge(); //output 'The age is: 2'
echo Person::tellAge(); //output 'The age is: 3'
echo Person::tellAge(); //output 'The age is: 4'



4.修饰全局作用域的变量,没有实际意义(存在着作用域的问题,​​详情查看​​

如下所示:



<?php
static $name = 1;
$name++;
echo $name;
?>


另外:考虑到PHP变量作用域



<?php
include 'ChromePhp.php';

$age=0;
$age++;

function test1() {
static $age = 100;
$age++;
ChromePhp::log($age); //output 101
}

function test2() {
static $age = 1000;
$age++;
ChromePhp::log($age); //output 1001
}

test1();
test2();
ChromePhp::log($age); //outpuut 1
?>



可以看出:这3个变量是不相互影响的,另外,PHP里面只有全局作用域和函数作用域,没有块作用域

如下所示:



<?php
include 'ChromePhp.php';

$age = 0;
$age++;

for ($i=0; $i<10; $i++) {
$age++;
}
ChromePhp::log($i); //output 10;
ChromePhp::log($age); //output 11;
?>




在看别人项目过程中,看到函数里面很多static修饰的变量,关于static修饰的变量,作用域,用法越看越困惑,所以查了下资料。

static用法如下:

1.static 放在函数内部修饰变量

2.static放在类里修饰属性,或方法

3.static放在类的方法里修饰变量

4.static修饰在全局作用域的变量

所表示的不同含义如下:

1.在函数执行完后,变量值仍然保存

如下所示:



<?php
function testStatic() {
static $val = 1;
echo $val;
$val++;
}
testStatic(); //output 1
testStatic(); //output 2
testStatic(); //output 3
?>



2.修饰类的属性或方法,可以通过类名访问,如果是修饰的是类的属性,保留值

如下所示:



<?php
class Person {
static $id = 0;

function __construct() {
self::$id++;
}

static function getId() {
return self::$id;
}
}
echo Person::$id; //output 0
echo "<br/>";

$p1=new Person();
$p2=new Person();
$p3=new Person();

echo Person::$id; //output 3
?>



3.修饰类的方法里面的变量,不论是静态方法还是对象方法

如下所示:



<?php
class Person {
static function tellAge() {
static $age = 0;
$age++;
echo "The age is: $age";
}
}
echo Person::tellAge(); //output 'The age is: 1'
echo Person::tellAge(); //output 'The age is: 2'
echo Person::tellAge(); //output 'The age is: 3'
echo Person::tellAge(); //output 'The age is: 4'



4.修饰全局作用域的变量,没有实际意义(存在着作用域的问题,​​详情查看​​

如下所示:



<?php
static $name = 1;
$name++;
echo $name;
?>


另外:考虑到PHP变量作用域



<?php
include 'ChromePhp.php';

$age=0;
$age++;

function test1() {
static $age = 100;
$age++;
ChromePhp::log($age); //output 101
}

function test2() {
static $age = 1000;
$age++;
ChromePhp::log($age); //output 1001
}

test1();
test2();
ChromePhp::log($age); //outpuut 1
?>



可以看出:这3个变量是不相互影响的,另外,PHP里面只有全局作用域和函数作用域,没有块作用域

如下所示:



<?php
include 'ChromePhp.php';

$age = 0;
$age++;

for ($i=0; $i<10; $i++) {
$age++;
}
ChromePhp::log($i); //output 10;
ChromePhp::log($age); //output 11;
?>



    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/26063.html

    标签: phpstatic
    分享给朋友:

    “php static” 的相关文章

    尼日利亚VPS:低成本高性能的服务器托管解决方案

    尼日利亚VPS的定义与优势 尼日利亚VPS是一种基于虚拟化技术的服务器托管服务,专为尼日利亚及周边地区的用户设计。VPS(Virtual Private Server)允许用户在共享的物理服务器上拥有独立的虚拟环境,享有更高的资源分配和操作自由度。对于尼日利亚的用户来说,本地数据中心的存在意味着更低...

    Hostodo无法打开的解决方案与常见原因分析

    Hostodo概览 Hostodo于2014年在美国成立,定位为大众市场的VPS主机商。它的使命是提供高性价比的虚拟专用服务器,让更多用户能够享受到可靠的网络服务。随着云计算的普及,越来越多的小企业和个人用户需要更灵活的主机解决方案,Hostodo正是为了满足这种需求而诞生的。 在市场上,Hosto...

    原生IP的重要性及其在外贸中的应用价值

    原生IP的定义与特点 谈到原生IP,这个概念在网络世界中显得极为重要。简单来说,原生IP是指那些与虚拟专用服务器(VPS)所在国家一致的IP地址。这意味着,它们的注册信息和其实际位置是相符的,根本没有经过修改或伪造。这一点在外贸业务中尤为重要,很多情况下,企业需要保证他们的服务器IP地址真的是注册所...

    获取国外动态IP服务的指南与优势

    在当今互联网的世界中,动态IP(Dynamic IP)逐渐成为了一个重要的概念。它指的是由互联网服务提供商(ISP)动态分配的、可变的IP地址。与固定不变的静态IP相比,每次连接互联网时,动态IP都可能发生变化。这种灵活性不仅高效利用了IP资源,还在多个领域产生了实际应用的优势。 动态IP的特点非常...

    GA Cloud:全球化一站式云计算服务,优化您的企业数据管理

    GA Cloud成立于2021年,实际上是我对云计算服务界的一次全新探索。作为一家致力于全球化一站式云计算服务的公司,GA Cloud在市场中逐渐凸显出它的实力和影响力。我们在香港本地拥有8个以上的POP接入点,同时也在马来西亚、美国、日本、欧洲等地设立了多个数据中心。目前,我们的数据机柜数量已超过...

    Windows SSH Keygen 无法连接问题解决指南

    在现代网络环境中,SSH(Secure Shell)协议扮演着至关重要的角色,确保了远程登录的安全性与可靠性。在Windows操作系统中,了解SSH的基本知识是非常必要的。SSH不仅提供了加密的网络服务,还为我们在远程管理服务器时提供了安全的通道。 当我们谈到SSH的时候,首先想到的就是它的密钥认证...