php面试中的经典问题

问题一问题描述考虑下面代码:$str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2)) { echo "\"" . $str1 . "\" contains \"...

2016-04-29 23:02:22

阅读数:7269

评论数:0

90-新垃圾回收机制说明

90-新垃圾回收机制说明在5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection),引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果refcount为0,那么变量的空间可以被释放,否则就不释放,这是一种非常简单的GC...

2016-04-28 22:08:58

阅读数:7783

评论数:0

89-变量的引用与计数规则

89-变量的引用与计数规则变量的内部引用和计数在引擎内部,一个PHP的变量是保存在“zval”结构中,此结构包含了变量的类型和值信息,这个在之前的文章 变量的内部存储:值和类型 中已经介绍了,此结构还有另外两个字段信息,一个是”is_ref”(此字段在5.3.2版本中是is_ref__gc),此字...

2016-04-28 22:01:37

阅读数:654

评论数:0

88-zend_execute的具体执行过程

88-zend_execute的具体执行过程解释器引擎最终执行op的函数是zend_execute,实际上zend_execute是一个函数指针,在引擎初始化的时候zend_execute默认指向了execute,这个execute定义在{PHPSRC}/Zend/zend_vm_execute....

2016-04-28 22:01:04

阅读数:7345

评论数:0

87-代码的加密与解密

87-代码的加密与解密PHP语言作为脚本语言的一种,由于不需要进行编译,所以通常PHP程序的分发都是直接发布源代码。 对于一些开源软件来说,这并没有什么问题,因为它本来就希望有更多的人阅读代码,希望有更多的人参与进来, 而对于商业代码来说,这却是一个不太好的消息,不管是从商业秘密,还是从对公司产权...

2016-04-28 22:00:44

阅读数:1252

评论数:0

86-中间代码opcode的执行

86-中间代码opcode的执行假如我们现在使用的是CLI模式,直接在SAPI/cli/php_cli.c文件中找到main 函数, 默认情况下PHP的CLI模式的行为模式为PHP_MODE_STANDARD。 此行为模式中PHP内核会调用php_execute_script(&file_...

2016-04-28 22:00:15

阅读数:7317

评论数:0

85-虚拟机的语法分析

85-虚拟机的语法分析Bison是一种通用目的的分析器生成器。它将LALR(1)上下文无关文法的描述转化成分析该文法的C程序。 使用它可以生成解释器,编译器,协议实现等多种程序。 Bison向上兼容Yacc,所有书写正确的Yacc语法都应该可以不加修改地在Bison下工作。 它不但与Yacc兼容还...

2016-04-28 21:59:30

阅读数:6856

评论数:0

84-虚拟机的词法解析

84-虚拟机的词法解析语言从广义上来讲是人们进行沟通交流的各种表达符号。每种语言都有专属于自己的符号,表达方式和规则。 就编程语言来说,它也是由特定的符号,特定的表达方式和规则组成。 语言的作用是沟通,不管是自然语言,还是编程语言,它们的区别在于自然语言是人与人之间沟通的工具, 而编程语言是人与机...

2016-04-28 21:58:52

阅读数:4140

评论数:0

83-Zend虚拟机

83-Zend虚拟机通过前面的学习,我们了解到一个PHP文件在服务器端的执行过程包括以下两个大的过程: 递给php程序需要执行的文件, php程序完成基本的准备工作后启动PHP及Zend 引擎, 加载注册的扩展模块。 初始化完成后读取脚本文件,Zend引擎对脚本文件进行词法分析,语法分析。然后编译...

2016-04-28 21:58:30

阅读数:579

评论数:0

82-资源resource类型

82-资源resource类型讲述之前,先描述下{资源}类型在内核中的结构://每一个资源都是通过它来实现的。 typedef struct _zend_rsrc_list_entry { void *ptr; int type; int refcount; }zend_r...

2016-04-28 21:57:16

阅读数:7482

评论数:0

81-继承与实现接口

81-继承与实现接口在定义一个类时往往会使其继承某个父类或者实现某个接口,在扩展中实现这个功能非常方便。下面我先给出PHP语言中的代码。<?php interface i_myinterface { public function hello(); }class parent_cla...

2016-04-28 21:56:33

阅读数:540

评论数:0

80-定义接口

80-定义接口定义一个接口还是很方便的,我先给出一个PHP语言中的形式。<?php interface i_myinterface { public function hello(); } ?> 那它在扩展中的实现是这样的。zend_class_entry *i_myinter...

2016-04-28 21:56:12

阅读数:660

评论数:0

79-命名空间

79-命名空间在维基百科中,对命名空间的定义是: 命名空间(英语:Namespace)表示标识符(identifier)的上下文(context)。一个标识符可在多个命名空间中定义, 它在不同命名空间中的含义是互不相干的。在编程语言中,命名空间是一种特殊的作用域,它包含了处于该作用域内的标识符, ...

2016-04-28 21:55:46

阅读数:524

评论数:0

78-对象属性读写

78-对象属性读写这一节主要描述与对象属性有关的东西。有关如何对它进行定义的操作我们已经在上一章中描述过了,这里不再叙述,只讲对其的操作。读取对象的属性ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, ...

2016-04-27 13:32:42

阅读数:991

评论数:0

77-创建对象实例

77-创建对象实例为了操作一个对象,我们需要先获取这个对象的实例,而这有肯定会涉及调用对象的构造方法。首先我们先了解下一个object在PHP内核中到底是如何实现的。typedef struct _zend_object_value { zend_object_handle handle;...

2016-04-27 13:32:12

阅读数:802

评论数:0

76-对象

76-对象对象是我们可以进行研究的任何事物,世间万物都可以看作对象。它不仅可以表示我们可以看到的具体事物, 也可以表示那些我们看不见的事件等。对象是一个实体,它具有状态,一般我们用变量来表示, 同时它也可以具有操作行为,一般用方法来表示,对象就是对象状态和对象行为的集合体。在之前我们很多次的说到类...

2016-04-27 13:31:57

阅读数:925

评论数:0

75-保留类与特殊类

75-保留类与特殊类在面向对象语言中,都会内置一些语言内置提供的基本功能类,比如JavaScript中的Array,Number等类, PHP中也有很多这种类,比如Directory,stdClass,Exception等类,同时一些标准扩展比如PDO等扩展中也会定义一些类, PHP中类是不允许重...

2016-04-27 13:31:27

阅读数:981

评论数:0

74-魔术函数与延迟绑定

74-魔术函数与延迟绑定PHP中有一些特殊的函数和方法,这些函数和方法相比普通方法的特殊之处在于:用户代码通常不会主动调用, 而是在特定的时机会被PHP自动调用。在PHP中通常以”“打头的方法都作为魔术方法, 所以通常不要定义以”“开头的函数或方法。 例如:__autoload()函数, 通常我们...

2016-04-27 13:31:12

阅读数:694

评论数:0

73-继承,多态与抽象类

73-继承,多态与抽象类继承继承是一种关联类的层次模型,它可以建立类之间的关系,并实现代码重用,方便系统扩展。 继承提供了一种明确表述共性的方法,是一个新类从现有的类中派生的过程。 继承产生的新类继承了原始类的特性,新类称为原始类的派生类(或子类), 而原始类称为新类的基类(或父类)。派生类可以从...

2016-04-27 13:30:33

阅读数:884

评论数:0

72-访问控制

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

2016-04-27 13:29:57

阅读数:693

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭