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中的引用是指一个最终内容的多个别名,对它们中的任意一个进行修改都会影响到其他变量,而删除其中的一个变量,其他都会被作用到。

  到这里都说完了,刚开始学习一门新语言时很多概念需要进行转变,从而达到适配。到目前为止,本章的主要内容应该搞清楚了,并不难吧,哈哈·~