zoukankan      html  css  js  c++  java
  • PHP面向对象之对象和引用

    在PHP中对象类型和简单变量类型表现可以说是大相径庭,很多数据类型都要可以在写时进行复制,如当写代码$a=$b时,两个变量因为赋予相同的值而告终。所以需要注意的是,这种情况用在对象时就会完全不同了。


    我们来看看下面的代码,你期望输出什么值呢?

    01<?php
    02class Person{
    03                                                                                                                                                      
    04          public $name="张三";       
    05          public  function say(){
    06               echo "我叫"$this->name ."<br>" ;  
    07          }          
    08}
    09$Person=new Person();
    10$Person->name="李四";
    11$Person1=$Person;
    12$Person1-> name="王五" ;
    13$Person->say();
    14$Person1->say();

    上面的程序出输:

            我叫王五

            我叫王五


    我们来看一下为什么会得出这样的结果。当将$Person赋值给$Person1时,并没有复制$Person的内容。相反,PHP使用了另一种方式将$Person1指向同一个对象。这种方式就是PHP的对象引用。PHP 的对象的引用接近指针,它储存着该对象的一个“标识符”(类似地址),传递对象时是在拷贝这个标识符,而不是内容。

    要想知道对象$Person和$Person1是否拥有相同的类和属性,可以通过使用“==”操作符来比较这两个对象。代码如下(承接上面的代码):

    1if($Person == $Person1){
    2       echo "Person和Person1具有相同的类和属性" ;
    3}else{
    4       return false;
    5}

    程序输出:Person和Person1具有相同的类和属性

    要想知道对象$Person和$Person1是否拥有相同的类和属性,并且存储在相同的位置,可以通过使用“===”操作符来比较这两个对象。代码如下:

    1if ($Person === $Person1){
    2       echo "Person和Person1具有相同的类和属性且存储在相同的位置" ;
    3else{
    4       return false ;
    5}

    程序输出:Person和Person1具有相同的类和属性且存储在相同的位置

    最后,如果我们希望把对象$Person的内容复制给$Person1,可以使用克隆,如$Person1=clone $Person

  • 相关阅读:
    vim encoding
    window线程间通信常用的三种方法
    Python与C之间的相互调用(Python C API及Python ctypes库)
    vim中去掉每一行的^M
    现实点,不要急! [ 公司软件过程改进案例]
    理解TCP/IP协议
    Linux下C/C++帮助手册安装方法 及使用方法
    MySQL主主高可用(keepalive)
    React获取DOM元素ref属性
    一些vue组件库
  • 原文地址:https://www.cnblogs.com/zhouguowei/p/5179069.html
Copyright © 2011-2022 走看看