PHP内核探索:变量概述


Posted in PHP onJanuary 30, 2014

现代编程语言中的基本元素主要有:变量,流程控制接口,函数等等。我能否不使用变量来编写程序呢? 这显然是可以的,例如:

<?php
    echo "Hello AndHM";
?>

这个程序很简单,输出一个字符串内容。

就和我们仅仅使用二进制也能编程一样,不使用变量也能完成大部分的工作,不使用变量我们的程序将丧失极大的灵活性, 变量可以让我们将值存储起来,以便在程序的其他地方使用,或者通过计算保存新的值。 变量具有三个基本特性:

名称。变量的标示符。就像小狗一样,主人可能会给这些小狗起个喜欢的名称。 变量命名上,PHP继承了Perl的语法风格,变量以美元符号开始,后面跟变量名。 一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。 PHP同时还支持复合变量,也就是类似$$a的变量,它会进行两次的解释。这给PHP带来了非常灵活的动态特性。

类型。变量的类型,就像小狗的品种,不同的小狗血统可能会不一样,有的聪明, 有的会购物等等。 在很多静态语言中,变量在定义时就指定了,在程序运行过程中都不允许进行变更, 那如果你有一只能随便指定品种的小狗会不会很拉风呢;-) PHP就是这样,属于弱类型语言,可以随便赋予它任何类型的值。
值内容。 这是标示所代表的具体内容。这就像是实实在在的小狗的这个实物。 你可以给任何一条小狗起名为:小七,在编程语言中也是如此,你可以给变量赋予它 所能表示范围的值。不过在同一时间,变量只能有一个值。

PHP中组成变量名的字母可以是英文字母 a-z,A-Z,还可以是 ASCII 字符从 127 到 255(0x7f-0xff)。 变量名是区分大小写的。

除了变量本身,在PHP中我们经常会接触到与变量相关的一些概念,比如:常量,全局变量,静态变量以及类型转换等。 本章我们将介绍这些与变量相关的实现。其中包括PHP本身的变量低层存储结构以及弱类型系统的实现, 以及这些类型之间的相互转换等。
先看一段PHP代码:

<?php
    $foo = 10;
    $bar = 20;
    function change() {
        global $foo;
        $bar = 0;
        $foo++;
    }
    change();
    echo $foo, ' ', $bar;
?>

运行代码会输出11 20。

可是为什么会有这样的输出呢?变量在PHP的内部是如何实现的呢? 变量的作用域又是怎么实现的呢? 这是本章将对围绕变量这个主题展开讨论,下面我们从最基本的变量实现开始。

不是所有编程语言中的变量的值都可以改变的。想想我们学过的数学中的变量。 他们的值也是不可改变的。例如: x + y = 10; 变量x和y的值是不能发生变化的。 在某个具体场景,也就是某个方程式中只有表示特定的值,变量的值不能改变的好处是: 这样就能尽可能少的产生副作用, 在Erlang语言中就是如此,它是一门函数式编程语言,非常值得学习。

PHP 相关文章推荐
PHP5中的this,self和parent关键字详解教程
Mar 19 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
Mar 26 PHP
深入PHP magic quotes的详解
Jun 17 PHP
神盾加密解密教程(一)PHP变量可用字符
May 28 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
详谈PHP程序Laravel 5框架的优化技巧
Jul 18 PHP
PHP中new static()与new self()的比较
Aug 19 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
Laravel5中Cookie的使用详解
May 03 PHP
PHP实现微信商户支付企业付款到零钱功能
Sep 30 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
May 02 PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 #PHP
PHP $_FILES中error返回值详解
Jan 30 #PHP
带密匙的php加密解密示例分享
Jan 29 #PHP
PHP过滤★等特殊符号的正则
Jan 27 #PHP
php中自定义函数dump查看数组信息类似var_dump
Jan 27 #PHP
PHP中的按位与和按位或操作示例
Jan 27 #PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 #PHP
You might like
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
表单的一些基本用法与技巧
2006/07/15 Javascript
javascript 面向对象思想 附源码
2009/07/07 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
Promise扫盲贴
2019/06/24 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
使用tensorflow实现线性svm
2018/09/07 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
python操作gitlab API过程解析
2019/12/27 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
Ejb技术面试题
2015/04/29 面试题
北大自主招生自荐信
2013/10/19 职场文书
公司节能减排倡议书
2014/05/14 职场文书
医学生求职信
2014/07/01 职场文书
医生见习报告范文
2014/11/03 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
2015年入党积极分子评语
2015/03/26 职场文书
身份证丢失证明
2015/06/19 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python
Python数据类型最全知识总结
2021/05/31 Python
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server
Nginx 常用配置
2022/05/15 Servers