小米技术社区
小米技术社区管理员 关于小米

27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]

E-mail:mzze@163.com

Q Q:32362389

W X:xiaomi168527

小米技术社区大牛王飞 关于王飞

27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]

E-mail:wf_live@126.com

Q Q:3940019

微博:王小贱ss

小米技术社区设计小艳 关于小艳

大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]

E-mail:97157726@qq.com

Q Q:97157726

标签云
精品推荐
您的位置:首页 > 后端编程 > PHP > PHP基础

PHP中创建类和对象的方法;对象的比较

分类: PHP基础42个赞

创建类

语法:

class 类名{
  //属性
  //方法
  //常量
}

类是由属性、方法、常量组成的,

也可以说类成员有:属性、方法、常量    


类名的命名规则

1. 以字母、下划线开头,后面跟的是字母、数字、下划线

2. 不能用PHP关键字做类名

3. 类名不区分大小写(变量名区分,关键字、类名不区分大小写)

4. 类名用帕斯卡命名法(大驼峰 单词的首字母大写)

<?php
class Student {
}


创建对象(对象实例化)

通过new关键字来实例化对象。

1.先定义类

<?php

class Student {
}

2.再实例化对象

$stu1=new Student();
$stu2=new Student;    //小括号可以省略,都一样
var_dump($stu1,$stu2);  //object(Student)#1 (0) { } object(Student)#2 (0) { }


属性

属性本质就是变量

调用属性的语法:

通过->调用对象的成员   

对象名->属性名  
对象名->方法名()
//如:
$stu->name='tom';
$stu->test();
<?php
//定义类
class Student {
  public $name;       //属性
  public $add='地址不详';   //属性
}
//实例化对象
$stu=new Student();
//print_r($stu);  //结果:Student Object ( [name] => [add] => 地址不详 )

操作属性

1、给属性赋值
$stu->name='tom';
$stu->add='北京';
2、获取属性的值
echo '姓名:'.$stu->name,'<br>'; //姓名:tom
echo '地址:'.$stu->add,'<br>';    //地址:北京
3、添加属性
$stu->age=20;
print_r($stu);  //Student Object ( [name] => tom [add] => 北京 [age] => 20 ) 
echo '<br>';
4、删除属性
unset($stu->add);
print_r($stu);  //Student Object ( [name] => tom [age] => 20 )

方法

方法的本质就是函数  

调用方法的语法:

对象名->方法名() 
//如:
$stu->test();
<?php
class Student {
  //定义方法
  public function show() {
    echo '这是show方法<br>';
  }
  //public可以省略,如果省略,默认就是public,不过不建议省略
  function test() {
    echo '这是test方法<br>';
  }
}
$stu=new Student;
$stu->show(); //调用方法
$stu->test();



注意:

1、方法前面public是可以省略的,如果省略,默认就是public的,但不建议省略。

2、属性前面的public不能省略



对象的比较


注意:对象的传递是地址传递,而不是数据本身

当我们把一个对象赋值到另一个变量时,也是值拷贝,但是拷贝的不是数据本身,而是对象标识符(地址)

案例:对象的传递

<?php
//定义类
class Student {
  
}
//实例化对象
$stu1=new Student();
$stu2=new Student;
$stu3=$stu2; //对象传递的是地址 
//var_dump($stu1,$stu2,$stu3); //object(Student)#1 (0) { } object(Student)#2 (0) { } object(Student)#2 (0) { }


//对象比较
var_dump($stu1==$stu2);   //bool(true) ,比较对象的结构
echo '<br>';
var_dump($stu1===$stu2);  //bool(false) $stu1和$stu2是否是同一个对象
echo '<br>';
var_dump($stu2===$stu3);  //bool(true) $stu2和$stu3是同一个对象

相等:结构和保存的值一样就相等

全等:指向同一个对象才是全等。


案例2:

<?php
class Person{
 public $name;
 public $age;
}
$p1 = new Person();
$p1->name = "小明";
$p1->age=80;
$p2=$p1;
$p2->age=85;
echo $p2->name;
echo $p1->age;
?>

(1)$p1对应内存地址,假设是0x123,($p1和地址存放在栈区,相当于我们查字典时的索引);

 (2)通过内存地址的索引,找到堆区。堆区里面存放着”小王“,”80“等数据

 (3)$p2 = $p1,实际上是将$p1的内存地址0x123传给$p2,堆区里的属性$name,$age不变,也就是不会再重新复制一份。所以,在改变$p2->age=85时,$p1->age的值也改变了。

对象的比较原理


所以:

如果给一个函数传递一个对象,实际传递的是一个地址,指向对象的地址;

如果给函数传递的是基本数据类型(整数、小数、布尔、字符串),传递的是值;

如果给函数传递的是数组,传递的也是值;


小米技术社区

本站内容均为小米原创,转载请注明出处:小米技术社区>> PHP中创建类和对象的方法;对象的比较