positive: "在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数self, 且为第一个参数,self代表的是类的实例。<br>self:类的方法与普通的函数只有一个特别的区别——必须有一个额外的第一个参数名称, 按照惯例它的名称是self。类的实例:是将类应用在实例场景之中,比如有个类里的函数是f,假如这个f具有print某一时刻的天气状况的能力,那么如果我需要这个f来print一下今天12点的天气,那么让他打印今天12点的天气这个动作,就是类的实例化,让类中的函数具有的能力变成真实的动作。<br>实例化实例:#类定义classpeople:#定义基本属性 name='' age=0#定义私有属性,私有属性在类外部无法直接进行访问#定义构造方法def__init__(self,n,a): self.name= n self.age= adefspeak(self):print(""%s 说: 我%d 岁。""%(self.name,self.age))# 实例化类 p= people('Python',10,30) p.speak()<br>输出结果:<br>4.继承<br>假如有两个家族,有一个家族A开始没落了,另一个新兴的家族B想继承A家族的物资和佣人,那么就可以通过如下的方式实现继承,在这里,家族A即是父类,家族B是子类。在用法上,如果B家族可以任意使用A家族的物品和佣人。<br>class[子类]([父类]):BaseClassName(示例中的基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用。python还支持多继承,即可以继承多个父类。继承方式和单继承方式一样,方式如下:class[子类]([父类]1,[父类]2,[父类]3):<br>继承实例:<br>#类定义classpeople:#定义基本属性 name='' age=0#定义私有属性,私有属性在类外部无法直接进行访问 __weight=0#定义构造方法def__init__(self,n,a,w): self.name= n self.age= a self.__weight= wdefspeak(self):print(""%s 说: 我%d 岁。""%(self.name,self.age))#单继承示例classstuden"
negative: 由于push操作的特殊性,索引key在PHP数组中先后顺序并不是通过下标大小来决定,而是由push的先后决定。例如 $arr[1] = 2; $arr[2] = 3;对于double类型的key,Zend HashTable会将他当做索引key处理<br>6. PHP变量<br>PHP是一门弱类型语言,本身不严格区分变量的类型。PHP在变量申明的时候不需要指定类型。PHP在程序运行期间可能进行变量类型的隐示转换。和其他强类型语言一样,程序中也可以进行显示的类型转换。PHP变量可以分为简单类型(int、string、bool)、集合类型(array resource object)和常量(const)。以上所有的变量在底层都是同一种结构 zval。<br>Zval是zend中另一个非常重要的数据结构,用来标识并实现PHP变量,其数据结构如下:<br>Zval主要由三部分组成:<br>type:指定了变量所述的类型(整数、字符串、数组等)refcount&is_ref:用来实现引用计数(后面具体介绍)value:核心部分,存储了变量的实际数据<br>Zvalue是用来保存一个变量的实际数据。因为要存储多种类型,所以zvalue是一个union,也由此实现了弱类型。<br>PHP变量类型和其实际存储对应关系如下:<br>1IS_LONG-> lvalue<br>2IS_DOUBLE-> dvalue<br>3IS_ARRAY-> ht<br>4IS_STRING-> str<br>5IS_RESOURCE-> lvalue<br>引用计数在内存回收、字符串操作等地方使用非常广泛。PHP中的变量就是引用计数的典型应用。Zval的引用计数通过成员变量is_ref和ref_count实现,通过引用计数,多个变量可以共享同一份数据。避免频繁拷贝带来的大量消耗。<br>在进行赋值操作时,zend将变量指向相同的zval同时ref_count++,在unset操作时,对应的ref_count-1。只有ref_count减为0时才会真正执行销毁操作。如果是引用赋值,则zend会修改is_ref为1。<br>PHP变量通过引用计数实现变量共享数据,那如果改变其中一个变量值呢?当试图写入一个变量时,Zend若发现该变量指向的zval被多个变量共享,则为其复制一份ref_count为1的zv