positive: "文章较长,仔细看吧<br>零碎重点:<br>1. 首先举个例子帮你理解一下类。 百灵鸟类就是鸟类的一个子类,而鸟类就是百灵鸟类的超类。<br>2. PS:python中类习惯上使用单数名词,并且首字母大写。<br>3.类的实例:所有对象都属于某一个类,而这就是类的实例。<br>一张简单的草图可以快速帮你理解他们之间的关系<br>创建自己的类:<br>以代码来解释如何创建以及注意事项。<br>代码的解释和注意事项:<br>Person: 类的名字,class语句会在函数定义地方创建自己的命名空间。<br>在新式类语法中,需要在模块或者脚本开始的地方防止赋值语句:_metaclass_ = type 。<br>代码中直接调用类的部分就是指的类的实例。<br>代码快速理解:<br>把类比作图纸,类的实例化对象是真正可以居住的房子。一个图纸可以设计出成千上万的房子,长得都差不多。但是它们都可以由不同的主人,self相当于每个房子的门牌号,由self就可以轻松找到家。<br>self: 变量的对象自身,对自己的引用。self参数实际上正是方法和函数的区别。<br>问题延伸:<br>怎么让方法和特性便的私有(从外部无法访问)?<br>在定义它的名字前面加上双下划线__。<br>eg : def __inaceessible(self):<br>漏洞:其实可以访问的,你可以理解为前面加上单下划线的类名格式形式。<br>指定超类(超类也叫做父类,基类,超类)<br>用法:将其他类名写在class语句后的圆括号内指定超类<br>解释:Filter是一个用于过滤序列的通用类,Filter类的用处在于它可以用作其他类的超类,比如SPAMFilter类,可以将序列中的""SPAM""过滤出去。<br>多个超类:<br>代码涉及到了多重继承,是非常有用的,但是尽量少用。<br>类的特性与函数,方法:(这一块我们全部用上文中指定超类的代码为例子)<br>issubclass函数: 查看一个类是不是另外一个的子类。<br>>>> issubclass(SPAMFilter,Filter)<br>True<br>>>> issubclass(Filter,SPAMFilter)<br>False<br>__bases__特性:查看已知类的超类(们)。<br>__dict__特性:查看对象中所有存储的值"
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