Giter VIP home page Giter VIP logo

tipi's Introduction

深入理解PHP内核(Thinking In PHP Internals)

TIPI项目是一个自发项目, 项目主要关注PHP的内部实现, 以及PHP相关的方方面面, 该项目包括《深入理解PHP内核》这本书,以及一些相关的PHP项目,例如一些PHP扩展及研究项目.

前往这里阅读在线版本的 深入理解PHP内核(TIPI),有什么问题或建议,可以 提交Github Issue

关于如何加入项目组

很多同学留言询问怎么加入项目,其实很简单:

  1. fork这个项目
  2. 提交Pull Requests
  3. 在一段时间后,如果对项目还有热情可以直接给你开放提交权限

1. 下载

本站所有内容托管在githubhttp://github.com/reeze/tipi上,如果你电脑上安装了git最好, 没有的话也不碍,在页面右右上角可以下载到项目完整的压缩包,选择你喜欢的压缩格式即可。

2. 安装

将项目解压,目录结构中web目录即为项目的web根目录,项目不强制将你的Web服务器根目录设为web目录的路径, 可以直接将整个项目解压至你的Web根目录。如果你是Windows用户,有一点需要说明一下,为了保证书籍内容的独立性, 书籍相关的配图没有放到web目录下,所以你通过web访问书籍的时候可能会看不到图片,我们把/book/images目录链接到了 /web/images/book目录,因为windows并不能是识别软链接,所以会有问题,要解决这个问题有三个方法:

  • 把/book/images目录拷贝到/web/images目录下并重命名为book目录,这样可能比较麻烦,如果我们以后更新了内容,你重新下载会比较麻烦。
  • 另一个方法是使用Web服务器的别名方法,这样你需要修改服务器的配置,如果使用Apache则可以在配置文件中加入Alias配置选项: Alias /images/book TIPI的绝对路径\book\images, 如果使用其他WebServer请参考相关手册。
  • 第三个方法就是我们推荐的换系统了。这只是建议,我们更喜欢*nix环境。

3. 反馈

对书有什么意见?如果对某章节有意见或建议可以直接在线留言,如果有其他的内容你也可以直接联系我们。

4. 联系作者

你可以联系以下作者

或者发给所有组员: [email protected]

贡献者

感谢这些贡献者:https://github.com/reeze/tipi/contributors

tipi's People

Contributors

alexcaesar avatar c9n avatar chenishr avatar dolfly avatar gitter-badger avatar honestqiao avatar jerry9032 avatar joostshao avatar liaohuqiu avatar miaojuanfeng avatar phppan avatar reeze avatar shipengtaov avatar stephenjtong avatar sudu avatar toxmc avatar yaoshanliang avatar zhoumengkang avatar zither avatar zlxy avatar zonxin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tipi's Issues

函数的实现这章的整体重构

回过头来看,看的比较晕,更别说其他读者了,把整体思路梳理清楚,进行重构。

  1. 函数是什么?
  2. PHP中有哪些个函数
  3. 函数和方法的区别?
  4. 函数的内部结构
    等等。。。

增加对SPL的介绍

SPL这个扩展里有比较多的内置数据接口,队列,迭代器,定长数组等,虽然平时用的不多。不过这里也可以关注一下。使用这些类的好处是性能相对比较好,而且也是标准扩展。所以值得关注

增加zend_llist链表的实现的数据结构和接口的介绍

HashTable本身也可以当做一个链表来使用,不过出于性能和空间的考虑,很多地方(数据量小,访问不是很频繁)使用链表来保存数据。也可以简单介绍下。

有一个问题zend_llist中没有像HashTable那样循环apply删除对象的接口,可能是因为需求不是特别的原因,不过这里的确有这个需求:

php/php-src#36

可以考虑给zend_llist实现这样一个接口作为演示用。

完善HashTable小节

这一节的内容有:

  • 其他哈希表的实现
  • PHP的哈希性能
    没有完成。

增加Zend扩展相关内容

Zend扩展可以做的事情比较多,可以和语言深度整合。和胖胖要调研的内容差不多。

Zend扩展有:Zend Optimizer+ (opcache), xdebug等。

现在Zend扩展的ini配置可以使用相对路径了(5.5+)

关于opcode的优化

看完 《第七章 Zend虚拟机 » 第四节 PHP代码的加密解密》我有个疑问,因为php code到opcode是一个直译的过程,并没有任何优化(别的语言的编译器一般会做一些优化,比如去除无用变量之类的),那么是否可以在扩展这一层面上做一些这样子的工作呢?或者说现在是否有一些扩展已经这么做了?求指教,多谢。

完善COW小节的原理。

如邮件中的同学问道的问题。这节对于COW缺少了最关键的内容。需要补充COW的时机。

hash函数实现的代码问题

第三章中哈希函数的实现。这个函数应该是有问题的。

static int hash_str(char *key)
{
    int hash = 0;

    char *cur = key;

    while(*(cur++) != '\0') {
        hash += *cur;
    }

    return hash;
}

是不是应该改成这样?

static int hash_str(char *key)
{
    int hash = 0;

    char *cur = key;

   char tmp;

    while((tmp=*(cur++)) != '\0') {
        hash += tmp;
    }

    return hash;
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.