27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]
E-mail:mzze@163.com
Q Q:32362389
W X:xiaomi168527
27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]
大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]
E-mail:97157726@qq.com
Q Q:97157726
语法:
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] => 地址不详 )
$stu->name='tom'; $stu->add='北京';
echo '姓名:'.$stu->name,'<br>'; //姓名:tom echo '地址:'.$stu->add,'<br>'; //地址:北京
$stu->age=20; print_r($stu); //Student Object ( [name] => tom [add] => 北京 [age] => 20 ) echo '<br>';
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中创建类和对象的方法;对象的比较