林东
林东
2021年05月03日入驻 合计 3 个作品 累计 109.99 万字 共有 2 订阅
  • 第五节 魔术方法,延迟绑定及静态成员

    PHP中有一些特殊的函数和方法,这些函数和方法相比普通方法的特殊之处在于: 用户代码通常不会主动调用,而是在特定的时机会被PHP自动调用。在PHP中通常以""打头的方法都作为魔术方法, 所以通常不要定义以""开头的函数或方法。例如:autoload()函数, 通常我们不会手动调用这个函数, 而如果在代码中访问某个未定义的方法, 如过已经定义了autoload()函数,此时PHP将会尝试调用autoload()函数, 例如在类的定义中如果定义了construct()方法,在初始化类的实例时将会调用这个方法, 同理还有__destuct()方法。
  • 第四节 类的继承,多态及抽象类

    面向对象的三大特性(封装、继承、多态),在前一小节介绍了封装,这一小节我们将介绍继承和多态的实现。
  • 第三节 访问控制的实现

    面向对象的三大特性(封装、继承、多态),其中封装是一个非常重要的特性。封装隐藏了对象内部的细节和实现,使对象能够集中而完整的描述并对应一个具体的事物,只提供对外的访问接口,这样可以在不改变接口的前提下改变实现细节,而且能使对象自我完备。除此之外,封装还可以增强安全性和简化编程。在面向对象的语言中一般是通过访问控制来实现封装的特性。
  • 第二节 类的成员变量及方法

    在上一小节,我们介绍了类的结构和声明过程,从而,我们知道了类的存储结构,接口抽象类等类型的实现方式。在本小节,我们将介绍类的成员变量和成员方法。首先,我们看一下,什么是成员变量,什么是成员方法。

    类的成员变量在PHP中本质上是一个变量,只是这些变量都归属于某个类,并且给这些变量是有访问控制的。类的成员变量也称为成员属性,它是现实世界实体属性的抽象,是可以用来描述对象状态的数据。

    类的成员方法在PHP中本质上是一个函数,只是这个函数以类的方法存在,它可能是一个类方法也可能是一个实例方法,并且在这些方法上都加上了类的访问控制。类的成员方法是现实世界实体行为的抽象,可以用来实现类的行为。
  • 第八章 线程安全

  • 第七章 Zend虚拟机

    在前面的章节中,我们了解到一个PHP文件在服务器端的执行过程包括以下两个大的过程:

    递给php程序需要执行的文件, php程序完成基本的准备工作后启动PHP及Zend引擎, 加载注册的扩展模块。
    初始化完成后读取脚本文件,Zend引擎对脚本文件进行词法分析,语法分析。然后编译成opcode执行。如过安装了apc之类的opcode缓存, 编译环节可能会被跳过而直接从缓存中读取opcode执行。
    在第二步中,词法分析、语法分析,编译中间代码,执行中间代码等各个部分统称为Zend虚拟机。与Java、C#等编译型语言相比,PHP少了一个手动编译的过程,它们无需编译即可运行,我们称其为解释性语言。Java有自己的Java虚拟机,它在多个平台上实现统一语言;C#有自己的.NET虚拟机,它在单一平台实现多种语言;PHP跟他们一样,也有属于自己的Zend虚拟机。它们在本质是相同的,它们都是抽象的计算机。这些虚拟机都是在某种较底层的语言上抽象出另外一种语言,有自己的指令集,有自己的内存管理体系。它们最终都会将抽象级别较高的语言实现转化为抽象级别较低的语言实现,并且实现其它辅助功能,如内存管理,垃圾回收等机制,以减少程序员在具体实现上的工作,从而可以将更多的时间和精力投入到业务逻辑中。从抽象层次看,Zend虚拟机比Java等语言更高级一些,这里的高级不是说功能更强大或效率更高,简单点说,Zend虚拟机离真正的机器实现更远一些。最近这些年,语言的发展只是不断的抽象,不断的远离机器,没有根本性的变化。
    本章,我们从虚拟机的前世今生讲起,叙述Zend虚拟机的实现原理,关键的数据结构,并在其中穿插一个关于语法实现的示例和源码加密解密的过程说明。
  • 第六章 内存管理

    内存是计算机非常关键的部件之一,是暂时存储程序以及数据的空间,CPU只有有限的寄存器可以用于存储计算数据,而大部分的数据都是存储在内存中的,程序运行都是在内存中进行的。和CPU计算能力一样,内存也是决定计算效率的一个关键部分。

    计算中的资源中主要包含:CPU计算能力,内存资源以及I/O。现代计算机为了充分利用资源,而出现了多任务操作系统,通过进程调度来共享CPU计算资源,通过虚拟存储来分享内存存储能力。本章的内存管理中不会介绍操作系统级别的虚拟存储技术,而是关注在应用层面:如何高效的利用有限的内存资源。

    目前除了使用C/C++等这类的低层编程语言以外,很多编程语言都将内存管理移到了语言之后,例如Java, 各种脚本语言:PHP/Python/Ruby等等,程序手动维护内存的成本非常大,而这些脚本语言或新型语言都专注于特定领域,这样能将程序员从内存管理中解放出来专注于业务的实现。虽然程序员不需要手动维护内存,而在程序运行过程中内存的使用还是要进行管理的,内存管理的工作也就编程语言实现程序员的工作了。

    内存管理的主要工作是尽可能高效的利用内存。

    内存的使用操作包括申请内存,销毁内存,修改内存的大小等。如果申请了内存在使用完后没有及时释放则可能会造成内存泄露,如果这种情况出现在常驻程序中,久而久之,程序会把机器的内存耗光。所以对于类似于PHP这样没有低层内存管理的语言来说,内存管理是其至关重要的一个模块,它在很大程度上决定了程序的执行效率。

    在PHP层面来看,定义的变量、类、函数等实体在运行过程中都会涉及到内存的申请和释放,例如变量可能会在超出作用域后会进行销毁,在计算过程中会产生的临时数据等都会有内存操作,像类对象,函数定义等数据则会在请求结束之后才会被释放。在这过程中何时申请内存及释放内存就比较关键了。PHP从开始就有一套属于自己的内存管理机制,在5.3之前使用的是经典的引用计数技术,但引用计数存在一定的技术缺陷,在PHP5.3之后,引入了新的垃圾回收机制,至此,PHP的内存管理机制更加完善。

    本章将介绍PHP语言实现中的内存管理技术实现。
  • 第一节 类的结构和实现

    面向对象编程中我们的编程都是围绕类和对象进行的。那在PHP内部类是怎么实现的呢?它的内存布局以及存储是怎么样的呢?继承、封装和多态又是怎么实现的呢?
  • 第五章 类和面向对象

    这一章我们从面向对象讲起,会说到PHP中的类,包括类的定义和实现、接口、抽象类以及与类相关的访问控制、对象和命名空间等。除此之外也会从其存储的内部结构,类的单继承的实现,接口的多继承,以及魔法方法的实现等细微处着手分析类相关的方方面面。
  • 第九节 小结

  • 第八节 匿名函数及闭包

    匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了, 目前使用比较广泛的Javascript以及C#,PHP直到5.3才开始真正支持匿名函数, C++的新标准C++0x也开始支持了。

    匿名函数是一类不需要指定标示符,而又可以被调用的函数或子例程,匿名函数可以方便的作为参数传递给其他函数, 最常见应用是作为回调函数。
  • 第七节 函数的调用和执行

    前面小节中对函数的内部表示以及参数的传递,返回值都有了介绍,那函数是怎么被调用的呢? 内置函数和用户定义函数在调用时会有什么不一样呢?下面将介绍函数调用和执行的过程。
  • 第六节 函数的返回值

    在编程语言中,一个函数或一个方法一般都有返回值,但也存在不返回值的情况,此时,这些函数仅仅是处理一些事务, 没有返回,或者说没有明确的返回值,在pascal语言中它有一个专有的关键字 procedure 。 在PHP中,函数都有返回值,分两种情况,使用return语句明确的返回和没有return语句返回NULL。
  • 第五节 函数的参数

  • 第四节 函数的定义

  • 第三节 函数间的转换

  • 第二节 函数的内部结构

  • 第一节 函数介绍

  • 第十四节 小结

  • 第十三节 数据类型转换

    PHP是弱类型的动态语言,在前面的章节中我们已经介绍了PHP的变量都存放在一个名为ZVAL的容器中, ZVAL包含了变量的类型和各种类型变量的值。 PHP中的变量不需要显式的数据类型定义,可以给变量赋值任意类型的数据, PHP变量之间的数据类型转换有两种: 隐式和显式转换。