没有定义形参 程序没有影响 php,PHP语言变量解析

概念

指存储数据的临时容器(空间)。由三部分构成: 变量名、变量值、内存地址

命名规则

►变量名必须以美元符号($)开始,第一个字符可以是字母或下划线但不能以数字开始

►变量名称只包含字母、数字、“_”,可用中文但不推荐

►区分大小写

►不允许包含空格

►驼峰命名法、下划线法

※$this 是一个特殊的变量,它不能被赋值。

编写$php; //定义

$php = "aaa"; //定义并赋值变量

unset($php); //删除变量

作用域Scope

变量的作用域由变量声明的地方所限制,决定程序哪些部分可以使用该变量。有四种:局部作用域(函数内部定义变量),全局(函数外部定义),静态,函数形参。

可变变量Variable Variables

一个变量的值为另一个变量的名$a = 'hello';

$hello = 'world';

echo $$a //输出结果为world

静态变量Static

静态变量只存在于函数内,其值在函数执行结束后不会被重置

传值方式

►复制传值:一个变量将其值复制一份,产生一个新的内存地址,再给第二个变量,第二个变量指向新的内存地址

►引用传值(Variable Reference):使用"$var = &$othervar;"语法,引用赋值意味着两个变量指向了同一个数据,没有拷贝任何东西。

相关函数

►var_dump() — 直接打印变量的相关信息,不用加echo

►isset() — 检测变量是否已定义且非 NULL

►empty() — 检查变量是否已定义且非零非空

以下值被认为是False

※isset()与empty()不会直接输出结果,可用于if的判断条件。

※empty() 本质上与 !isset($var) || $var == false 等价。

※只有empty只能判断一个变量,var_dump()、isset()、unset()可判断多个变量.

超全局变量

1) $_GET //接收地址栏传值

2) $_POST //接收表单post传值

3) $_REQUEST //既有$_GET,又有$_POST功能

4) $_SERVER //获取服务器相关信息

5) $_SESSION //会话的一种,数据存储在服务器端

6) $_COOKIE //会话的一种,数据存储在客户端

7) $_FILES //获取上传文件的相关信息

8) $GLOBALS //包含以上所有数据

※超级全局变量不能被用作函数或类方法中的可变变量。

垃圾回收机制Garbage Collection

每个php变量存在一个叫"zval"的变量容器中。容器除了包含变量的类型和值,还包括两个属性。

2bdafa58e9aeab252743376892f931b0.png

第一个是"is_ref",是布尔值,标识该变量是否是属于引用集合(reference set)。通过该属性,php引擎才能把普通变量和引用变量区分开来,由于php允许用户通过使用&来使用自定义引用,zval变量容器中还有一个内部引用计数机制,来优化内存使用。

第二个是"refcount",即reference counting,表示指向该zval变量容器的变量个数(也称符号即symbol)。所有的符号存在一个符号表(symbol table)中,其中每个符号都有作用域(scope),每个函数或方法也都有作用域。

当一个变量被赋常量值时,即生成一个zval变量容器,如:

$a = "new string";

//此时,"is_ref"默认设置为 FALSE,因为没有任何自定义的引用传值。

//"refcount" 为1,因为只有一个变量使用该容器

$b = $a;

//这时引用次数是2,因为同一个容器被$a和$b关联,php不会复制已生成的容器,而是更新symbol table将两个变量指向同一内存。

$a = "new string again";

//php复制已生成的容器给$b,现在有两个容器且引用计数均为1

当任何关联某个容器的变量离开其作用域(如:函数执行结束),或者变量被执行了函数 unset()时,引用计数refcount就会减1。当变量容器在"refcount"变成0时就成为垃圾,被回收销毁,容器与其值均不复存在,从而释放内存。

性能影响

第一,垃圾回收机制节省内存占用。

在程序执行中,一旦根缓冲区满了或调用gc_collect_cycles()时,就会执行回收。

第二,垃圾回收释放内存会引起程序执行时间增加。

虽然运行时会增加时间消耗,但在简单的程序执行时几乎就没有性能影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值