猿问

初学者请教下PHP手册中创建类的实例化对象的问题

本人初学者,是看着PHP官方手册来学习PHP,在类与对象这一章节有些地方不是很明白,希望在这里能得到帮助。代码如下:
classtest{
publicfunctioncounter(){
$c=0;
$c+=1;
echo$c;
}
}
$o=newtest;
$o->counter();//输出:1
echo'
';
$p=newtest;
$p->counter();//输出:1
检测$o==$ptrue$o===$pfalse想了解下在内存里,$o与$p是如何分布的,之间是何种关系?如将counter()中的$c定义为静态成员。
classtest{
publicfunctioncounter(){
static$c=0;
$c=$c+1;
echo$c;
}
}
$o=newtest;
$o->counter();//输出:1
echo'
';
$p=newtest;
$p->counter();//输出:2为什么这里输出为2?????
在static关键字这一节中,讲到“静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。”
classtest{
publicstatic$str='HelloWorld!';
}
$o=newtest;
echo$o::$str;//正常输出'HelloWorld'。为什么这里通过实例化对象是可以访问静态属性的
希望能得到大家的帮助,谢谢~
叮当猫咪
浏览 450回答 2
2回答

翻过高山走不出你

首先纠正你几个误区,成员应该声明在类中,你却声明在函数中,那叫局部变量。“静态属性不能通过一个类已实例化的对象来访问”这句话可能有点难理解,或许是翻译不准确,并不是说不能访问静态成员,而是说不能以动态的方式访问静态成员。给你举个栗子

开心每一天1111

$o==$p是因为它们是同一个类实例化出来的,所以类型相同,为true官方的说明:当使用比较操作符(==)时,对象以一种很简单的规则比较:当两个对象有相同的属性和值,属于同一个类且被定义在相同的命名空间中,则两个对象相等。另一方面,当使用全等符(===)时,当且仅当两个对象指向相同类(在某一特定的命名空间中)的同一个对象时才相等。内存分布没有任何关系,只不过都是堆区的一段内存。静态变量有自己的内存区域,叫做静态区,所有同一个类实例化出来的都公用这个静态变量。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答