php原理-鸟哥的文章列表

  1. 概述

    深入浅出PHP

  2. 变量

    深入理解PHP原理之变量
    深入理解PHP原理之变量作用域(Scope in PHP)
    深入理解PHP原理之变量分离/引用
    深入理解php内核之写时复制
    到了引用这儿还是有点懵逼
    PHP的GET/POST等大变量生成过程
    深入理解PHP原理之变量生命期(一)
    Array dereferencing
    如何获取一个变量的名字
    如何获取一个变量的名字中提到了活动符号表
    而在PHP中, 所有的变量都存储在称为”符号表”的HastTable结构中. 在解析执行的过程中, 依旧保留着着”符号”信息, 所以, 肯定是可以获取到的.

    变量的使用

    而在PHP中, 符号的作用域是和活动符号表相关联的. 同一时间, 只有一个活动符号表.

    那么怎么理解活动符号表和符号表呢?

    对于PHP来说, 当前活动的符号表是保存在全局变量EG(active_symbol_table)中的, 而于此同时, 还有个全局符号表保存在EG(symbol_table)中, 在进入一个函数调用的执行体之前, 会生成一个新的active_symbol_table, 并且会保持一个调用栈式样的符号表栈:EG(symtable_cache), 以便在退出函数调用的时候, 恢复之前的活动符号表(作用域).

    同时在PHP中, 不能实现作用域继承, 也就是不能直接访问作用域外层的符号(需要加上golbal声明), 而如果加上global的声明的话, 也会在当前的活动作用域生成一个copy, 也就是说, 不存在在当前作用域可见的符号是保存在全局符号表的

  3. 函数

    深入理解PHP原理之函数(Introspecting PHP Function)
    函数分为两种zend_internal_function(对应结构体_zend_internal_function)和用户自定义函数(对应结构体_zend_op_array)。还有一个结构体zend_function.
    首先你要理解他的设计目标: zend_internal_function, zend_function,zend_op_array可以安全的互相转换(The are not identical structs, but all the elements that are in “common” they hold in common, thus the can safely be casted to each other);
    具体来说,当在op code中通过ZEND_DO_FCALL调用一个函数的时候,ZE会在函数表中,根据名字(其实是lowercase的函数名字,这也就是为什么PHP的函数名是大小写不敏感的)查找函数, 如果找到,返回一个zend_function结构的指针(仔细看这个上面的zend_function结构), 然后判断type,如果是ZEND_INTERNAL_FUNCTION, 那么ZE就调用zend_execute_internal,通过zend_internal_function.handler来执行这个函数, 如果不是,就调用zend_execute来执行这个函数包含的zend_op_array.

    【todo】现在不明白的是zend_op_array里面到底存的是什么?
    函数类型提示(Callable typehint)
    深入理解PHP之匿名函数

  4. opcode

    深入理解PHP原理之opcodes
    使用PHP embed sapi实现opcodes查看器
    关于PHP的编译和执行分离
    深入理解PHP原理之异常机制
    PHP源码分析之Global关键字
    也就是说, 如果你global了一个变量,那么Zend就会去全局symbol_table去寻找,如果找不到,就会在全局symbol_table中分配相应的变量。通过这样的机制,实现了全局变量

  5. 对象

    深入理解PHP原理之对象(一)
    PHP5多重继承顺序的bug

  6. 数组

    关于一笔试题(Iterator模式)
    深入理解PHP原理之foreach
    PHP中的Hash算法
    深入理解PHP之数组(遍历顺序)

  7. 扩展

    扩展PHP(一)
    关于PHP扩展开发的一些资源
    用C/C++扩展你的PHP
    保证PHP扩展的依赖关系
    深入理解PHP原理之扩展载入过程

  8. 内存管理

    PHP原理之内存管理中难懂的几个点
    深入理解PHP内存管理之谁动了我的内存

  9. SAPI
    深入理解ZendSAPIs
    垃圾回收机制
    第二节 SAPI概述
    fastcgi
    嵌入式sapi

  10. 其他
    深入理解PHP原理之错误抑制与内嵌HTML
    PHP Performance Optimization
    关于PHP浮点数你应该知道的
    PHP浮点数的一个场景问题的解答
    深入理解PHP原理之文件上传
    PHP受locale影响的函数
    字符编码详解
    isset与is_null的不同
    isset是语句 is_null是函数,判断是否为null时可以使用===
    深入理解ob_flush和flush的区别
    在php中使用协程实现多任务调度
    使用fsock实现异步调用php
    更简单的重现PHP core调用栈
    Zend Signal in PHP5.4
    一些PHP Coding Tips

  11. Dtrace
    Dtrace
    php骇客指南