php 对象的一些特性

class person
{
    private $name;
    private $age = 2;
    public function __construct($name,$age)
    {
        $this->name = $name;
        $this->age = $age;
    }
}

$p1 = new person(‘gxw‘,12);
$p2 = new person(‘gxw‘,12);

if($p1 == $p2){
    echo "p1 == p2";
}else{
    echo "p1 != p2";
} //echo p1 == p1

if($p1 === $p2){
    echo "p1 == p2";
}else{
    echo "p1 != p2";
} //echo p1 != p2

‘== ’  用于判断两个对象实例的所有属性是否都相等。

‘===’  用于判断两个变量是否是同一个对象的引用。

$p3 = $p1;
if($p3 === $p1){
    echo ‘p3 == p1‘;
}else{
    echo ‘p3 != p1‘;
}//echo ‘p3 == p1‘

$p3->name = ‘www‘;
if($p3 == $p1){
    echo ‘p3 == p1‘;
}else{
    echo ‘p3 != p1‘;
} //echo p3==p1

  p3 为p1 的引用,更改p3同时影响到p1,  可以说p3为p1的浅拷贝。这种情况经常出现在函数传参

$p1 = new person(‘gxw‘,12);
function change($tmp){
    $tmp->name =‘tmp‘;
}

change($p1);
echo $p1->name;
//echo tmp

$str = ‘hello‘;

function zero($tmp){
    $tmp = ‘‘;
}
zero($str);
echo $str; //echo hello

  

可以看出php对函数传参进行过特殊处理,在传 类对象实例时,传得是引用。 而在传字符串类型及其他基础类型时,会先进行copy。

通过clone 关键字(注意是关键字,不是方法) 来进行对象的深拷贝

$p4 = clone $p1;
$p4->name = ‘hello‘;
if($p1 == $p4){
    echo ‘p1 == p4‘;
}else{
    echo ‘p1 != p4‘;
} //echo p1 != p4

看到p1 的name 并没有因为p4的name的改变而改变,说明p4 为p1的深拷贝.

我们还可以重载clone 方法,达到一些特定的复制效果。

时间: 2024-08-08 22:05:53

php 对象的一些特性的相关文章

对象的封装特性

四.对象的封装特性 1)什么是封装? 就是将对象的成员隐藏起来,不让其直接在类的外部访问,要通过一定的方法对封装起来的成员进行访问控制: 面向对象的封装特性并不是不让成员被访问,而是要对其进行访问控制: 2)修饰词 var  公有的(过时) 可以在类的外部直接通过对象访问(赋值和输出):在类的内部可以通过$this来进行访问: public  公有的 等同于var:既可以修饰成员属性,又可以修饰成员方法:public修饰的成员在类的外部可以使用对象来调用,在类的内部使用$this进行访问:成员方

Golang-面向对象编程三大特性-继承、多重继承

Golang-面向对象编程三大特性-继承 继承基本介绍和示意图 继承可以解决代码复用,让我们的编程更加靠近人类思维. 当多个结构体存在相同的属性(字段)和方法时,可以从这些结构体中抽象出结构体(比如刚才的Student),在该结构体中定义这些相同的属性和方法. 其它的结构体不需要重新定义这些属性(字段)和方法,只需嵌套一个 Student 匿名结构体即可. [画出示意图] 也就是说:在 Golang 中,如果一个 struct 嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的字段和

Golang-面向对象编程三大特性-多态

Golang-面向对象编程三大特性-多态 基本介绍 变量(实例)具有多种形态.面向对象的第三大特征,在 Go 语言,多态特征是通过接口实现的.可以按照统一的接口来调用不同的实现.这时接口变量就呈现不同的形态. 快速入门 在前面的 Usb 接口案例,Usb usb ,既可以接收手机变量,又可以接收相机变量,就体现了 Usb 接口 多态特性.[点明] 接口体现多态的两种形式 多态参数 在前面的 Usb 接口案例,Usb usb ,即可以接收手机变量,又可以接收相机变量,就体现了 Usb 接口 多态.

OC学习6——面相对象的三大特性

我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这也是面向对象的三大特征.OC学习篇之---类的三大特性(封装,继承,多态) 1.封装(Encapsulation)是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问(该隐藏的隐藏,该暴露的暴露).封装的主要目的是: 隐藏类的实现细节 让使用者只能通过预先定义好的方法来访问数据,从而可以在该方法中加入控制逻辑,限制对成员变量的不合理访问 可进行数据检查,从而有

面相对象的三大特性以及定义?

三大特征:继承,封装,多态 继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要.这也体现了大自然中一般与特殊的关系.继承性很好的解决了软件的可重用性问题.比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从

黑马程序员-OC对象的三大特性

OC语言是面向对象的语言,其三大特性必不可少. 一.封装是一个很重要的概念,它避免外界直接访问或修改对象的属性,可以过滤不合理的值,让外界不必关心内部的细节.通过set方法来让外部设置成员的属性值,通过get方法来获得对象属性值. 1 #import <Foundation/Foundation.h> 2 @interface Student : NSObject</span></span> 3 { 4 int _age; //以下划线开头,避免和局部变量弄混 5 in

黑马程序员— OC基本语法、类和对象、三大特性

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一讲     OC简介及基本语法 Objective-C简称OC是在C语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,也就是可以在OC代码中混入C语言代码,甚至是C++代码.可以使用OC开发Mac OS X平台和IOS平台的应用程序.简单的介绍了一下OC,下面我们来看看OC的基本语法,学习OC之前我们先学习了C语言,因为OC是在C语言的基础上的一门开发语言,因此OC的很多基本语法

python学习之对象的三大特性

在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合.编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希望维护代码前,还需要从头至尾的通读一遍吧,就好像一间杂乱无章的房子,你想找一件想要的东西,但是需要地毯式的搜索一遍,甚至多遍才能找到.很明显,这样做的话,很浪费我们的时间. 多态:顾名思义就是多种形态,即便不知道变量所引用的对象类型是什么,依旧可以对它操作,而它也会根据对象(或类)类型的不同而表现出

JS面向对象篇一、理解对象及属性特性(属性描述符)

本文内容 1.理解对象; 2.ECMAScript有两种属性类型:数据属性和访问器属性(getter和setter函数); 3.数据属性的属性特性:[[Configurable]].[[Enumerable]].[[Writable]].[[value]]; 4.访问器属性的属性特性:[[Configurable]].[[Enumerable]].[[get]].[[set]]; 5.Object.defineProperty().Object.defineProperties().Object

PHP类和对象之对象的高级特性

对象比较,当同一个类的两个实例的所有属性都相等时,可以使用比较运算符==进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符===进行判断. class Car { } $a = new Car(); $b = new Car(); if ($a == $b) echo '=='; //true if ($a === $b) echo '==='; //false 对象复制,在一些特殊情况下,可以通过关键字clone来复制一个对象,这时__clone方法会被调用,通过这个魔术