php变量赋值与引用
来源:互联网 发布:mac怎么关闭访客 编辑:程序博客网 时间:2024/05/16 17:33
最近在学习php,现在php的版本是5,从此php的作者可以以此称它是编程语言中第四个完全支持面向对象的语言了。一个脚本语言做到如此繁琐,仅仅是为了支持越来越多的时下流行的新特性,是不是应在安全性,易用性,针对语言本身个性等方面做更深的考量呢?应该你就是php,不是C++,java,你存在就是因为你是php。好啦,废话不多说。进入正题。
正如大家所知道的,php是一门服务器端的脚本语言,不像c,c++等编译性语言,它是解释执行的。在它的语法中赋值是怎么实现的呢?我们看看下面一段代码吧:
class A{ public $foo = 1;}$a = new A;$b = $a; $c = $b; $d = $c; $a->foo = 2;$a = null;echo $b->foo . "\n";echo $c->foo . "\n";echo $d->foo . "\n";$c->foo = 3;$c = null;echo $d->foo . "\n";echo $b->foo . "\n";这段代码很简单吧,让我们看看它的执行结果是什么吧,在命令行中输入php class.php:
22233应该会有点疑问吧:
既然我修改了对象a的值是,也影响了其他对象,那么为什么我删除对象a的时候,不会影响其他对象呢?
解释一下吧:在php中,变量赋值的模型是这样的。
每一个创建的对象都会有一个全局的id,我们在变量赋值时,只是传递该对象的id,通过这个id指向真正的对象内容。当我们修改对个指向同一id的变量时,被它所指的真正对象的内容被修改了,所有修改的结果会影响到其他的变量;而将其中一个变量赋值为null仅仅会讲这个变量指向一个空变量,不影响其他变量。
好吧,既然说到这里了,就接着在讲讲php中的引用吧。还是以一段代码进行说明。
class simple_class{ public $var = 'a default value'; public function display_var() { echo $this->var . "\n"; }}$instance = new simple_class();$instance->display_var();$assigned = $instance;$reference =& $instance;$instance->var = '$assigned will have this value';$instance = null;//$assigned = null;var_dump($instance);var_dump($assigned);var_dump($reference);执行这段代码,我们可以看到结果:
a default valueNULLobject(simple_class)#1 (1) { ["var"]=> string(30) "$assigned will have this value"}NULLexpecting 'bar':barexpecting 'foo':foo这下应该比较容易解释了,变量赋值是传递id,而引用不一样,同C++中的引用的概念类似,php中的引用是指一个最终内容的多个别名,对它们中的任意一个进行修改都会影响到其他变量,而删除其中的一个变量,其他都会被作用到。
到这里都说完了,刚开始学习一门新语言时很多概念需要进行转变,从而达到适配。到目前为止,本章的主要内容应该搞清楚了,并不难吧,哈哈·~
- php变量赋值与引用
- PHP匿点源码之变量赋值与引用
- 对象引用与变量赋值
- PHP foreach与引用赋值
- php传值赋值与引用赋值
- php基础--可变变量、引用赋值
- php 变量赋值、引用以及垃圾回收
- php变量引用赋值一些知识
- Python中变量引用与赋值
- php引用与销毁变量
- 深入理解PHP中赋值与引用
- 深入理解PHP中赋值与引用
- php:引用 与 赋值 的区别
- 变量赋值和引用
- 变量赋值和引用
- 变量的引用赋值
- php中变量赋值是引用的例子
- php与javascript之间变量引用问题
- 程序员技术练级攻略
- 图片的文字变成wrod的方法
- Android 编译系统分析(一)
- nginx源码分析—启动流程
- xml文件读写总结
- php变量赋值与引用
- 第十三周【任务二】Animal设计为抽象类,每一个Animal的派生类都有一个“名字”数据成员
- 使用 Spring 2.5 基于注解驱动的 Spring MVC
- 十三周报告四
- oracle中中文格式日期转换
- why cannot sleep in the ISR
- Android学习之用adb连接模拟器查询sqlite数据库
- HTML-小总结
- 一些函数